Find All Anagrams in a String - Codeprg

Breaking

programing News Travel Computer Engineering Science Blogging Earning

Thursday, 13 August 2020

Find All Anagrams in a String

Find All Anagrams in a String
 

 

 Find All Anagrams in a String

Given a string s and 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:

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".

 

 

class Solution {
public:
    vector<int> findAnagrams(string s, string p) {
        
        int n=s.size(),m=p.size();
        if(n==0||n<m)return {};
        int a[26]={0},b[26]={0};
        vector<int> v;
         for(int j=0;j<m;++j)
            {
              b[s[j]-'a']++;
              a[p[j]-'a']++;
            }
        int i=m,j;
        while(i<(n))
        {
            for( j=0;j<26;++j)
            {
                if(a[j]!=b[j])
                {
                    break;
                }else{
                    continue;
                }
            }
            if(j==26)
                v.push_back(i-m);
            b[s[i-m]-'a']--;
            b[s[i]-'a']++;
            ++i;
        }
         for( j=0;j<26;++j)
            {
                if(a[j]!=b[j])
                {
                    break;
                }else{
                    continue;
                }
            }
            if(j==26)
                v.push_back(i-m);
        return v;
    }
};