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;
}
};