438. Find All Anagrams in a String Solution | LeetCode

 438Find All Anagrams in a String

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:

  • 1 <= s.length, p.length <= 3 * 104
  • s and p consist of lowercase English letters.

the solution to the Above Problem is


class Solution {
public:
    vector<int> findAnagrams(string s, string p) {
        vector<int>v(26,0);
        vector<int>vv(26,0);
        vector<int>ans;
        for(int i=0; i<p.length(); i++){
            v[p[i]-'a']++;
        }
        int st=0;
        int e=0;
        if(p.length()>s.length()){
            return ans;
        }
        while(e<p.length()){
            vv[s[e]-'a']++;
            e++;
        }
        e--;
        while(e<s.length()){
            if(vv==v){
                ans.push_back(st);
            }
            e++;
            if(e<s.length()){
                vv[s[st]-'a']--;
                st++;
                vv[s[e]-'a']++;
            }
        }
        return ans;
    }
};

Thank You For Reading This.

Post a Comment

0 Comments