力扣 LeetCode 30 串聯所有單詞的子串

2021-09-25 03:57:11 字數 2271 閱讀 9381

給定乙個字串 s 和一些長度相同的單詞 words。找出 s 中恰好可以由 words 中所有單詞串聯形成的子串的起始位置。

注意子串要與 words 中的單詞完全匹配,中間不能有其他字元,但不需要考慮 words 中單詞串聯的順序。

示例 1:

輸入:s = 「barfoothefoobarman」,

words = [「foo」,「bar」]

輸出:[0,9]

解釋:從索引 0 和 9 開始的子串分別是 「barfoor」 和 「foobar」 。

輸出的順序不重要, [9,0] 也是有效答案。

示例 2:

輸入:s = 「wordgoodgoodgoodbestword」,

words = [「word」,「good」,「best」,「word」]

輸出:類似尺取法,假設word單詞長度為s 我們就每s段分成乙個單詞,每次分的第一單詞頭為1到s-1,這樣,我們就取到了所有單詞,之後map(dict)記錄下單詞出現數量之後尺取知道tmpdic==dic就為其中乙個答案

class

solution

:def

findsubstring

(self, s:

str, words: list[

str])-

> list[

int]:if

len(words)==0

:return

l_w=

len(words[0]

) l_s=

len(s)

dic=

tmpdic=

ans=

num=

len(words)

for word in words:

if word in dic:

dic[word]+=1

else

: dic[word]=1

for i in

range

(l_w)

: tmpdic.clear(

) l,r=i,i

tmpnum=

0print

(i)while

(i+l_w<=l_s and r+l_w<=l_s)

:if s[r:r+l_w]

notin tmpdic:

tmpdic[s[r:r+l_w]]=

1else

: tmpdic[s[r:r+l_w]]+=

1 tmpnum+=

1if s[r:r+l_w]

notin dic:

tmpnum=

0 tmpdic.clear(

) l=r+l_w

else

:#print(dic,tmpdic,num,tmpnum)

#print(l,r)

if tmpdic[s[r:r+l_w]

]== dic[s[r:r+l_w]

]and tmpnum==num:

#print("yes")

tmpdic[s[l:l+l_w]]-=

1 l=l+l_w

tmpnum-=

1elif tmpdic[s[r:r+l_w]

]< dic[s[r:r+l_w]]:

pass

else

:while

(tmpdic[s[r:r+l_w]

]>dic[s[r:r+l_w]])

: tmpdic[s[l:l+l_w]]-=

1 l+=l_w

tmpnum-=

1if tmpdic[s[r:r+l_w]

]== dic[s[r:r+l_w]

]and tmpnum==num:

print

("yes"

) tmpdic[s[l:l+l_w]]-=

1 l=l+l_w

tmpnum-=

1 r=r+l_w

return ans

力扣leetcode30 串聯所有單詞的子串

和 詳細通俗的思路分析,多解法 解法相同,該文章已經寫得很清晰了,就不再贅述,但是這個演算法處理了很多不必要的位置。因為在最終匹配的解裡面一定含有words 0 那麼先用o n 時間 可以用kmp 找到所有的可能位置,然後對該位置使用滑動視窗即可,耗時為鏈結中演算法的1 4左右,儘管在leetcod...

leetcode 30 串聯所有單詞的子串

leetcode題目鏈結 題目要求 找出 由words陣列組成的字串 每乙個元素word等長 在字元轉s中的位置 陣列words生成的字典dic2 遍歷字串,從頭開始判斷長度為lenwords的字串 生成的字典dic1 如果dic1 與 dic2 相同,說明找到 def findsubstring ...

leetcode 30 串聯所有單詞的子串

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