給定乙個字串 s 和乙個非空字串 p,找到 s 中所有是 p 的字母異位詞的子串,返回這些子串的起始索引。字串只包含小寫英文本母,並且字串 s 和 p 的長度都不超過 20100。
說明:字母異位詞指字母相同,但排列不同的字串。
不考慮答案輸出的順序。
示例 1:
輸入:s: "cbaebabacd" p: "abc"
輸出:[0, 6]
解釋:起始索引等於 0 的子串是 "cba", 它是 "abc" 的字母異位詞。
起始索引等於 6 的子串是 "bac", 它是 "abc" 的字母異位詞。
解法:1.滑動視窗,把p中字元對映到乙個hash中去,在s上做滑動視窗也對映到乙個hash中去,滑動視窗每動一次,判斷2個hash空間是否相同,相同則找到了乙個位置。
2.暴力 o(nk)
class solution(object):
def findanagrams(self, s, p):
""":type s: str
:type p: str
:rtype: list[int]
"""if not s or len(s)list[int]:
hashmap=collections.defaultdict(int)
for i in p:hashmap[i]+=1
l=r=0
res=
def f(s,h):
for i in s:
if i in h and h[i]>=1:h[i]-=1
return sum(h.values())==0
for i in range(0,len(s)-len(p)+1):
tmp=copy.deepcopy(hashmap)
return res
class solution:
def findanagrams(self, s: str, p: str) -> list[int]:
hashmap=[0 for _ in range(26)]
for i in p:
hashmap[ord(i)-97]+=1
tmpmap=[0 for _ in range(26)]
l=r=0
res=
while rif r<=len(p)-1:
tmpmap[ord(s[r])-97]+=1
r+=1
else:
tmpmap[ord(s[r])-97]+=1
tmpmap[ord(s[l])-97]-=1
l+=1
r+=1
return res
438 找到字串中所有字母異位詞
給定乙個字串 s 和乙個非空字串 p,找到 s 中所有是 p 的字母異位詞的子串,返回這些子串的起始索引。字串只包含小寫英文本母,並且字串 s 和 p 的長度都不超過 20100。說明 字母異位詞指字母相同,但排列不同的字串。不考慮答案輸出的順序。示例 1 輸入 s cbaebabacd p abc...
438 找到字串中所有字母異位詞
給定乙個字串 s 和乙個非空字串 p,找到 s 中所有是 p 的字母異位詞的子串,返回這些子串的起始索引。字串只包含小寫英文本母,並且字串 s 和 p 的長度都不超過 20100。說明 字母異位詞指字母相同,但排列不同的字串。不考慮答案輸出的順序。示例 1 輸入 s cbaebabacd p abc...
438找到字串中所有字母異位詞
給定乙個字串 s 和乙個非空字串 p,找到 s 中所有是 p 的字母異位詞的子串,返回這些子串的起始索引。字串只包含小寫英文本母,並且字串 s 和 p 的長度都不超過 20100。說明 示例 1 輸入 s cbaebabacd p abc 輸出 0,6 解釋 起始索引等於 0 的子串是 cba 它是...