l am waiting for you
查看原帖
l am waiting for you
742305
du1wu2debenben楼主2022/11/11 21:30

1 第十三个点的输入数据我下载下来后啥也没有,我寻思就是空的呗?

2 我这为啥11 13超时呢?

之前的讨论中有同学说string可以通过本题?

大佬求教

//
//  main.cpp
//  KMP字符串匹配
//
//  Created by 汪汪队 on 2022/11/11.
//

#include <iostream>
#include <vector>
using namespace std;

vector<int>Next;

void getnext(string s){
    int i=0;
    int j=-1;
    Next.resize(s.size());
    Next[0]=-1;
    while (i<s.size()) {
        if(j==-1||s[i]==s[j]){
            i++;
            j++;
            Next[i]=j;
        }
        else j=Next[j];
    }
    return;
}

int KMP(string S,string s,int k){
    int m=S.size();
    int n=s.size();
    int i=0,j=k;
    while (i<n&&j<m) {
        if(i==-1||s[i]==S[j]){
            i++;
            j++;
        }
        else i=Next[i];
    }
    if(i==n) return j-i;
    else return -1;
}

int main() {
    string S;
    string s;
    cin>>S>>s;
    getnext(s);
    int n=0;
    for (int i=0; ; i++) {
        n=KMP(S,s,n);
        if(n==-1) break;
        cout<<++n<<endl;
    }
    int p=Next.size();
    for (int i=1; i<=p; i++) {
        cout<<Next[i]<<" ";
    }
    cout<<endl;
    return 0;
}
2022/11/11 21:30
加载中...