From c2e7444265d97287ad79aecd56610e4d303154f6 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 20 Oct 2017 16:57:33 -0500 Subject: [PATCH] Create 438._Find_All_Anagrams_in_a_String.md --- 438._Find_All_Anagrams_in_a_String.md | 69 +++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 438._Find_All_Anagrams_in_a_String.md diff --git a/438._Find_All_Anagrams_in_a_String.md b/438._Find_All_Anagrams_in_a_String.md new file mode 100644 index 0000000..f742775 --- /dev/null +++ b/438._Find_All_Anagrams_in_a_String.md @@ -0,0 +1,69 @@ +### 438. Find All Anagrams in a String + + +题目: + + + +难度: + +Easy + + + +思路 + +刚开始打算直接遍历整个s,时间复杂度为O(m*n),m和n分别为字符串p和s的长度,但是超时了 + + + +```python +python +class Solution(object): + def findAnagrams(self, s, p): + """ + :type s: str + :type p: str + :rtype: List[int] + """ + l, res = len(p), [] + for i in range(len(s)): + if collections.Counter(s[i:i+l]) == collections.Counter(p): + res.append(i) + return res +``` +于是用双指针,left和right都从0开始往后遍历 +```python +class Solution(object): + def findAnagrams(self, s, p): + """ + :type s: str + :type p: str + :rtype: List[int] + """ + result = [] + + cnts = [0] * 26 + for c in p: + cnts[ord(c) - ord('a')] += 1 + + left, right = 0, 0 + while right < len(s): + cnts[ord(s[right]) - ord('a')] -= 1 + while left <= right and cnts[ord(s[right]) - ord('a')] < 0: + cnts[ord(s[left]) - ord('a')] += 1 + left += 1 + if right - left + 1 == len(p): + result.append(left) + right += 1 + + return result +``` + + + +Author: Keqi Huang + +If you like it, please spread your support + +![Support](https://github.com/Lisanaaa/myTODOs/blob/master/WechatIMG17.jpeg) -- GitLab