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
本文介绍了一种高效的字符串匹配算法,该算法能在给定的字符串中找到由多个指定单词组成的子串的所有起始位置。通过构建一个包含所有单词及其出现次数的字典,并遍历目标字符串进行匹配,最终返回所有符合条件的子串起始索引。
412

被折叠的 条评论
为什么被折叠?



