最后问题缩小为: # 如何让bac判断三个元素都在abc中呢? # 比如,bab虽然ab在abc中,但是,没有c所以也是错的。
A: 只要保证
p中的各个字母个数
在s的子串中
相同即可。
我的做法(超出时间限制)
https://blog.csdn.net/qq_17550379/article/details/80550907
思路一:(看不懂)
class Solution:
def findAnagrams(self, s, p):
"""
:type s: str
:type p: str
:rtype: List[int]
"""
from collections import Counter
s_len, p_len = len(s), len(p)
count = p_len
pChar = Counter(p)
result = []
for i in range(s_len):
if pChar[s[i]] >= 1:
count -= 1
pChar[s[i]] -= 1
if i >= p_len:
if pChar[s[i - p_len]] >= 0:
count += 1
pChar[s[i - p_len]] += 1
if count == 0:
result.append(i - p_len + 1)
return result
思路二:
class Solution:
def findAnagrams(self, s, p):
"""
:type s: str
:type p: str
:rtype: List[int]
"""
from collections import Counter
s_len, p_len = len(s), len(p)
pChar, sChar = Counter(p), Counter()
result = []
for i in range(s_len):
sChar[s[i]] += 1
if i >= p_len:
sChar[s[i - p_len]] -= 1
if sChar[s[i - p_len]] == 0:
del sChar[s[i - p_len]]
if pChar == sChar:
result.append(i - p_len + 1)
return result