30分求教
查看原帖
30分求教
1021654
wwwzne楼主2023/10/28 22:33
#include<bits/stdc++.h>
using namespace std;
int xnext[1000];
int main(){
    string s1;
    cin>>s1;
    string s2;
    cin>>s2;
    xnext[0]=0;
    int j=0;
    for(int i=1;i<s2.size();i++){
        if(s2[i]==s2[j]){
            xnext[i]=j+1;
            j++;
        }else{
            j=xnext[xnext[i-1]]; 
            if(s2[i]!=s2[j]){
                xnext[i]=0;
            }else{
                xnext[i]=j+1;
            }
        }
    }
for(int i=0,j=0;i<s1.size();i++){
    if(s1[i]==s2[j]){
        j++;
    }else if (j > 0) {
        //cout<<j<<xnext[j-1]<<endl;
            j = xnext[j-1];
            i--;
    }
    //cout<<i<<j<<s2.size()<<endl;
     if (j == s2.size()) {
        //cout<<i<<endl;
        cout<<i-s2.size()+2<<endl;
        //cout<<j;
        j=xnext[j]+1;
        //cout<<j;
        //i=i-s2.size()+1;
    }
}
for(int i=0;i<s2.size();i++){
    cout<<xnext[i]<<" ";
}
    system("pause");
    return 0;
}
2023/10/28 22:33
加载中...