438. 找到字串中所有字母異位詞
阿新 • • 發佈:2018-12-16
最後問題縮小為: # 如何讓bac判斷三個元素都在abc中呢? # 比如,bab雖然ab在abc中,但是,沒有c所以也是錯的。
A: 只要保證
p中的各個字母個數
在s的子串中
相同即可。
我的做法(超出時間限制)
思路一:
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