【python/leetcode/Hard】Substring with Concatenation of All Words
阿新 • • 發佈:2018-11-03
題目
基本思路
使用一個字典統計一下words中每個單詞的數量。由於每個單詞的長度一樣,以題中給的例子而言,可以3個字母3個字母的檢查,如果不在字典中,則break出迴圈。有一個技巧是建立一個臨時字典currDict,用來統計s中那些在words中的單詞的數量,必須和words中單詞的數量相等,否則同樣break。
實現程式碼
class Solution(object):
def findSubstring(self, s, words):
"""
:type s: str
:type words: List[str]
:rtype: List[int]
"""
wordsNum = len(words)
sLen = len(s)
if wordsNum == 0 or sLen == 0:
return []
wordLen = len(words[0])
wordsDict = {}
for word in words:
wordsDict[word] = wordsDict[word]+1 if word in wordsDict else 1
res = []
# i 代表起始位置
for i in range(sLen+1-wordsNum*wordLen):
curDict = {}
j = 0
while j < wordsNum:
word = s[i+j*wordLen:i+j*wordLen+wordLen]
if word not in wordsDict:
break
curDict[word] = curDict[word]+1 if word in curDict else 1
if curDict[word] > wordsDict[word]:
break
j += 1
if j == wordsNum:
res.append(i)
return res