438 找到字串中所有字母異位詞

2021-10-02 19:08:39 字數 1375 閱讀 2126

給定乙個字串 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 它是...