➤ Problem Link : NAJPF
👉 Hint : Standard Pattern Searching(KMP or some other algorithm like Rabin-Karp etc.)
✅ C++ Solution :
#include<bits/stdc++.h>
using namespace std;
int F[1000001];
vector<int> vec;
void build_failure(string pattern)
{
int j;
vec.clear();
memset(F,0,sizeof(F));
F[0]=0;
for(int i=1;i<pattern.length();i++)
{
j=F[i-1];
while(j!=0)
{
if(pattern[j]==pattern[i])
{
F[i]=j+1;
break;
}
else j=F[j-1];
}
if(pattern[0]==pattern[i])
F[i]=1;
}
}
void kmp(string text,string pattern)
{
int i=0,j=0,cnt=0;
int n=text.length();int m=pattern.length();
while(i<n)
{
if(text[i]==pattern[j])
{
i++,j++;
if(j==m)
{
cnt++;
vec.push_back(i-m+1);
j=F[j-1];
}
}
else if (j>0)
j=F[j-1];
else
i++;
}
if(cnt>0)
{
cout<<cnt<<"\n";
for(i=0;i<vec.size();i++)
cout<<vec[i]<<" ";
}
else
cout<<"Not Found";
cout<<"\n\n";
}
int main()
{
int t;
cin>>t;
while(t--)
{
string text,pattern;
cin>>text>>pattern;
build_failure(pattern);
kmp(text,pattern);
}
}
Thank you for your patience reading. If you enjoyed this post, I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Whatsapp or Facebook.
😇Happy Learning!!
