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

Last updated

Was this helpful?