---
# System prepended metadata

title: LC 438. Find All Anagrams in a String
tags: [medium, leedcode, Sliding Window, c++]

---

# LC 438. Find All Anagrams in a String

### [Problem link](https://leetcode.com/problems/find-all-anagrams-in-a-string/)

###### tags: `leedcode` `medium` `c++` `Sliding Window`

Given two strings <code>s</code> and <code>p</code>, return an array of all the start indices of <code>p</code>'s anagrams in <code>s</code>. You may return the answer in  **any order** .

An  **Anagram**  is a word or phrase formed by rearranging the letters of a different word or phrase, typically using all the original letters exactly once.

**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:** 

```
Input: s = "abab", p = "ab"
Output: [0,1,2]
Explanation:
The substring with start index = 0 is "ab", which is an anagram of "ab".
The substring with start index = 1 is "ba", which is an anagram of "ab".
The substring with start index = 2 is "ab", which is an anagram of "ab".
```

 **Constraints:** 

- <code>1 <= s.length, p.length <= 3 * 10<sup>4</sup></code>
- <code>s</code> and <code>p</code> consist of lowercase English letters.

## Solution 1 - Sliding Window
#### C++
```cpp=
class Solution {
public:
    vector<int> findAnagrams(string s, string p) {
        vector<int> cntp(26, 0);
        for (char& c: p) {
            cntp[c - 'a']++;
        }

        vector<int> ans;
        vector<int> cnts(26, 0);
        for (int i = 0; i < s.size(); i++) {
            cnts[s[i] - 'a']++;
            if (i < p.size() - 1) {
                continue;
            }
            if (cntp == cnts) {
                ans.push_back(i - p.size() + 1);
            }
            cnts[s[i - p.size() + 1] - 'a']--;
        }
        return ans;
    }
};
```

>### Complexity
>|             | Time Complexity | Space Complexity |
>| ----------- | --------------- | ---------------- |
>| Solution 1  | O(n)            | O(1)             |

## Note
x
