You are given a string, S, and a list of words, L, that are all of the same length. Find all starting indices of substring(s) in S that is a concatenation of each word in L exactly once and without any intervening characters.
For example, given:
S: "barfoothefoobarman"
L: ["foo", "bar"]
You should return the indices: [0,9]
.
(order does not matter).
class Solution:
# @param S, a string
# @param L, a list of string
# @return a list of integer
def findSubstring(self, S, L):
words = {}
wordNum = len(L)
for i in L:
if i not in words:
words[i] = 1
else:
words[i] += 1
#since all words in L have same length, just count the first length
wordLen = len(L[0])
res = []
for i in range(len(S)+1-wordLen*wordNum):
curr={}
j=0
while j<wordNum:
word = S[i+j*wordLen:i+j*wordLen+wordLen]
if word not in words:
break
if word not in curr:
curr[word]=1
else:
curr[word]+=1
if curr[word] > words[word]:
break
j+=1
if j==wordNum:
res.append(i)
return res