题目
基本思路
使用一个字典统计一下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