OneCompiler

Count Occurrences Of Anagrams | Sliding Window

171


Count Occurrences Of Anagrams

Sliding Window

#include <bits/stdc++.h>
using namespace std;

int countAnagrams(string s,string pat){

int ans=0;
int n = s.size();
int patSize = pat.size();
if(patSize>n)
	return 0;

unordered_map<char,int> freq;
for(int i=0;i<patSize;i++){
	freq[pat[i]]++;
}
int uniqueChar=freq.size();

int start=0,end=0;
while(end<n){

	if(freq.find(s[end])!=freq.end()){
		freq[s[end]]--;
		if(freq[s[end]] == 0)
			uniqueChar--;
	}

	if(end-start+1 < patSize){
		end++;
		continue;
	}

	if(uniqueChar==0){
		ans++;
	}

	if(freq.find(s[start])!=freq.end()){
		freq[s[start]]++;
		if(freq[s[start]] == 1)
			uniqueChar++;
	}

	start++;
	end++;
}
return ans;

}

int main() {

string s;
cin>>s;
string pat;
cin>>pat;
cout<<countAnagrams(s,pat);

return 0;

}