Я пытаюсь решить вопрос программирования.
Given a text string and words (a list of strings), return all index pairs [i, j] so that the substring text[i]...text[j] is in the list of words.
Example 1:
Input: text = "thestoryofleetcodeandme", words = ["story","fleet","leetcode"]
Output: [[3,7],[9,13],[10,17]]
Example 2:
Input: text = "ababa", words = ["aba","ab"]
Output: [[0,1],[0,2],[2,3],[2,4]]
Explanation:
Notice that matches can overlap, see "aba" is found in [0,2] and [2,4].
Моя функция
def indexPairs(text: str, words: List[str]) -> List[List[int]]:
words = set(words) # O(w)
text = list(text) # O(n)
ans = []
for l in range(len(text)): # O(n)
for r in range(l + 1, len(text) + 1): # O(n)
w = "".join(text[l:r])
if w in words:
ans.append((l, r - 1))
return ans
Насколько я понимаю, этот код выполняется за O (n ^ 2) сложность времени .
Однако я запутался в 7-й строке, где я пишу w = "".join(text[l:r])
. Будет ли это рассматриваться как операция O (n) как индексирование массива (операция O (1)), а затем копирование его в строковую (операция O (n))?
Итак, действительно ли этот код O ( n ^ 3)?
Большое спасибо за любые советы.