# 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