leetcode 30 串聯所有單詞的子串

2021-09-29 04:48:49 字數 2004 閱讀 6437

leetcode題目鏈結

題目要求:找出 由words陣列組成的字串(每乙個元素word等長),在字元轉s中的位置

陣列words生成的字典dic2

遍歷字串,從頭開始判斷長度為lenwords的字串 生成的字典dic1

如果dic1 與 dic2 相同,說明找到

def

findsubstring

(self, s:

str, words)

:if s ==

""or words ==

:return

res =

lenwords =

len(words[0]

*len

(words)

)#陣列words生成的字典dic2

dic2 = self.help2(words)

for i in

range

(len

(s)-lenwords+1)

:#從頭開始判斷長度為lenwords的字串 生成的字典dic1

dic1 = self.help1(s[i:i+lenwords]

,len

(words[0]

))if dic1==dic2:

return res

#通過 字串str 和每乙個單詞的長度interval,生成字典

defhelp1

(self,

str,interval)

: dic =

for i in

range(0

,len

(str

)-interval+

1,interval):if

str[i:i+interval]

notin dic:

dic[

str[i:i+interval]]=

1else

: dic[

str[i:i+interval]]+=

1return dic

#通過陣列words 生成字典

defhelp2

(self,words)

: dic =

for i in words:

if i not

in dic:

dic[i]=1

else

: dic[i]+=1

return dic

題目要求:找出 由words陣列組成的字串(每乙個元素word等長),在字元轉s中的位置

對陣列words排序

遍歷字串,對長度為totallen的字串,拆成陣列,排序

如果 排好序的陣列 相同,說明找到

def

findsubstring2

(self, s:

str, words)

:if s ==

""or words ==

:return

res =

#對單詞陣列進行排序

words =

sorted

(words)

totallen =

len(words[0]

)*len(words)

wordlen =

len(words[0]

)for i in

range

(len

(s)-totallen+1)

: temp =

#對長度為totallen的字串,拆成陣列

for j in

range(0

,totallen,wordlen):)

temp =

sorted

(temp)

if temp == words:

return res

leetcode 30 串聯所有單詞的子串

給定乙個字串 s 和一些長度相同的單詞 words。找出 s 中恰好可以由 words 中所有單詞串聯形成的子串的起始位置。注意子串要與 words 中的單詞完全匹配,中間不能有其他字元,但不需要考慮 words 中單詞串聯的順序。示例 1 輸入 s barfoothefoobarman words...

leetcode 30 串聯所有單詞的子串

題目 給定乙個字串 s 和一些長度相同的單詞 words。找出 s 中恰好可以由 words 中所有單詞串聯形成的子串的起始位置。注意子串要與 words 中的單詞完全匹配,中間不能有其他字元,但不需要考慮 words 中單詞串聯的順序。示例 1 輸入 s barfoothefoobarman wo...

LeetCode 30 串聯所有單詞的子串

題目鏈結 題解 開個字典樹記錄下所有的單詞。然後注意題目的已知條件 每個單詞的長度都是一樣的。這就說明不會出現某個字串是另外乙個字串的字首的情況 除非相同 所以可以貪心地匹配 遇到什麼字元就在字典樹裡面沿著邊從根往下走就好 假設給的單詞的個數為len.每個單詞的長度都是l 顯然從每個位置開始都要匹配...