➤ Problem Link : QUERYSTR
👉 Hint : Use Z Algorithm
✅ C++ Solution :
#include<bits/stdc++.h>
using namespace std;
int Z[1000001];
void CalCZ(string s)
{
Z[0]=s.length();
int l=0,r=0;
for(int i=1;i<s.length();i++)
{
if(i>r)
{
l=i;
r=i;
while(r<s.length() && s[r]==s[r-l])
{
r++;
}
Z[i]=r-l;
r--;
}
else
{
int k=i-l;
if(Z[k]<r-i+1)
Z[i]=Z[k];
else
{
l=i;
while(r<s.length() && s[r]==s[r-l])
r++;
Z[i]=r-l;
r--;
}
}
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int t,n,x;
string s;
cin>>t;
while(t--)
{
cin>>s;
reverse(s.begin(),s.end());
CalCZ(s);
cin>>n;
while(n--)
{
cin>>x;
cout<<Z[s.length()-x]<<"\n";
}
}
}
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!!
