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 顯然從每個位置開始都要匹配...