题目描述
给定两个字符串 s 和 p,找到 s 中所有 p 的 变位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。
变位词 指字母相同,但排列不同的字符串。
题目来源
解题思考
实际上是第14题上面做的提升,此时找到变位词并不是直接返回,而是记录首个字符的下标。遍历结束之后再做返回。
代码实现
class Solution(object):
def findAnagrams(self, s, p):
"""
:type s: str
:type p: str
:rtype: List[int]
"""
res=[]
if len(p) > len(s): return res
l1, l2 = len(p), len(s)
temp,cur=[0]*26,[0]*26
for j in range(l1):
temp[ord(p[j])-ord('a')]+=1
cur[ord(s[j])-ord('a')]+=1
if cur == temp:
res.append(0)
for i in range(l2 - l1):
cur[ord(s[i+l1])-ord('a')]+=1
cur[ord(s[i])-ord('a')] -= 1
if cur == temp: res.append(i+1)
return res
性能评估
心得:路漫漫其修远兮,吾将上下而求索。