LeetCode--438. Find All Anagrams in a String(找到所有字元組合)Python
阿新 • • 發佈:2019-02-13
題目:
給定兩個字串s、p。找到s中和p包含相同字元的所有子串。
解題思路:
直接暴力搜尋s,固定長度,對p和s固定長度的子串分別進行排序,看兩者排序後是否相同。這樣是一種方法,但會超時。
另外一種方法是使用雜湊的方法。用兩個個1*26的list分別儲存p和s子串中各個字元出現的字數,對s進行滑動視窗,保持子串長度為p的長度。這樣複雜度為O(n)。
程式碼(Python):
class Solution(object): def findAnagrams(self, s, p): """ :type s: str :type p: str :rtype: List[int] """ if len(s)<len(p): return [] Dict = {} for i in range(26): Dict[chr(ord('a')+i)] = i p_char = [0]*26 for i in p: p_char[Dict[i]] = p_char[Dict[i]]+1 s_char = [0]*26 n_p = len(p) n_s = len(s) output = [] for i in range(n_p): s_char[Dict[s[i]]] = s_char[Dict[s[i]]]+1 if s_char==p_char: output.append(0) for i in range(1,n_s-n_p+1): s_char[Dict[s[i-1]]] = s_char[Dict[s[i-1]]]-1 s_char[Dict[s[i+n_p-1]]] = s_char[Dict[s[i+n_p-1]]]+1 if s_char==p_char: output.append(i) return output