Find All Anagrams in a String
String, Two Pointers
Easy? ... ~ Medium if O(n) required
Given a stringsand a non-empty string p, find all the start indices of p's anagrams in s.
Strings consists of lowercase English letters only and the length of both strings s and p will not be larger than 20,100.
The order of output does not matter.
Example 1:
Input:
s: "cbaebabacd" p: "abc"
Output:
[0, 6]
Explanation:
The substring with start index = 0 is "cba", which is an anagram of "abc".
The substring with start index = 6 is "bac", which is an anagram of "abc".Example 2:
Solution & Analysis
Approach 1:Fixed Size Sliding Window
一种思路是不断移动大小为t.length()的window,如果当前window中的字符统计和target一样,就放入结果中。
Approach 2:Flexible Size Sliding Window
通用Sliding Window 模板可以解决:counter记录map中还需要match的字符个数,如果counter==0,说明当前window中substring包含了要找的target string anagram,但是可以进一步检测是否可以缩短这个window。通过调整begin来实现。所以这个sliding window其实window size是在变化的,只有当counter==0,并且当前window size: end - begine == t.length()时,才记录结果。
Other Approach:
Reference
Sliding Window algorithm template to solve all the Leetcode substring search problem. https://leetcode.com/problems/find-all-anagrams-in-a-string/discuss/92007/Sliding-Window-algorithm-template-to-solve-all-the-Leetcode-substring-search-problem.
Similar Problem: Minimum Window Substring: Minimum Window Substring | https://www.youtube.com/watch?v=9qFR2WQGqkU
Last updated
Was this helpful?