You are given a string, s, and a list of words, words, that are all of the same length. Find all starting indices of substring(s) in s that is a concatenation of each word in words exactly once and without any intervening characters.
For example, given:
s: "barfoothefoobarman"
words: ["foo", "bar"]
You should return the indices: [0,9]
.
这题直接构建一个具体的字典然后遍历可得。具体代码如下。
class Solution(object):
def findSubstring(self, s, words):
"""
:type s: str
:type words: List[str]
:rtype: List[int]
"""
if len(s)<len(words)*len(words[0]):#加了它,由830多变成了735了啊
return []
wordLen,wordNum = len(words[0]),len(words)
wordDict = {}
for word in words:
if word not in wordDict:
wordDict[word]=1
else:
wordDict[word]+=1
result = []
for i in xrange(0,len(s)+1-wordLen*wordNum):
temp_wordDict,j={},0
while j<wordNum:
word = s[i+j*wordLen:i+j*wordLen+wordLen] #别把s忘了啊 str(word) ,[i+j*wordLen,i+j*wordLen+wordLen] 中间是冒号啊
if word not in wordDict:
break
if word not in temp_wordDict: #if word not in temp_wordDict: #Line 20: TypeError: unhashable type: 'list'
temp_wordDict[word] = 1
else:
temp_wordDict[word] += 1
if temp_wordDict[word] > wordDict[word]:
break
j+=1
if j==wordNum:
result.append(i)
return result