Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<string>
- using namespace std;
- int* maxPS(string st){
- int n=st.size();
- int len=0;
- int ans=0;
- int i=1;
- int *lps=new int[n];
- lps[0]=0;
- while(i<n){
- if(st[i]==st[len]){
- len++;
- lps[i]=len;
- ans=max(ans,lps[i]);
- i++;
- }
- else{
- if(len!=0){
- len=lps[len-1];
- }
- else{
- lps[i]=0;
- i++;
- }
- }
- }
- // for(int i=0;i<n;i++){
- // cout<<lps[i]<<" ";
- // }
- return lps;
- }
- int main()
- {
- int t;
- cin>>t;
- while(t--){
- string text;
- cin>>text;
- string st;
- cin>>st;
- int *lps=maxPS(st);
- int j=0;
- int i=0;
- int n=text.size();
- int m=st.size();
- while(i<n){
- if(text[i]==st[j]){
- i++;
- j++;
- }
- else{
- if(j!=0){
- j=lps[j-1];
- }
- else{
- i++;
- }
- }
- if(j==m){
- cout<<i-m<<" "<<st<<endl;
- }
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement