70分求助
查看原帖
70分求助
585201
6lszxz楼主2022/5/6 20:58
#include "cstdio"
#include "cstring"

char a[1000006],b[1000006];
int next[1000006];
int m,n;

void init(){
    next[1]=0;
    int j=0;
    for(int i=2;i<=n;i++){
        while (j>0 && b[i]!=b[j+1]){
            j = next[j];
        }
        if(b[i]==b[j+1]){
            j++;
        }
        next[i]=j;
    }
}


int main() {
    scanf("%s", a + 1);
    scanf("%s", b + 1);
    n = strlen(a + 1);
    m = strlen(b + 1);
    init();
    int j = 1;
    for (int i = 0; i <n; i++){
        while (a[i+1] != b[j+1] && j > 0) {
            j = next[j];
        }
        if (a[i+1] == b[j+1]) {
            j++;
        }
        if (j == m) {
            printf("%d\n", i +1 - m + 1);
        }
    }
    for(int k=1;k<=m;k++){
        printf("%d ",next[k]);
    }
    return 0;
}

2022/5/6 20:58
加载中...