← All problems

438. Find All Anagrams in a String

MediumOpen on LeetCodeProblem statement

Problem Statement

438. Find All Anagrams in a String

Medium


Given two strings s and p, return an array of all the start indices of p's anagrams in s. 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:

C++

Source file
class Solution {
public:
    vector<int> findAnagrams(string s, string p) {
        vector<int> pHash(26, 0), winHash(26, 0);
        vector<int> ans;
        if(s.length()<p.length())
            return ans;
        for(auto c: p)
            pHash[c-'a']++;
        for(int lt=0, rt=0; rt<p.length(); rt++)
            winHash[s[rt]-'a']++;
        if(winHash==pHash)
            ans.push_back(0);
        for(int lt=1, rt=p.length(); rt<s.length();lt++, rt++){
            winHash[s[lt-1]-'a']--;
            winHash[s[rt]-'a']++;
            if(winHash==pHash)
                ans.push_back(lt);
        }
        return ans;
    }
};