字符串模板

用户头像 发布于 2022-11-21 最后更新于 2025-11-20 25 次阅读


AI 摘要

想在海量文本中瞬间定位目标?KMP算法,这把“字符串匹配的瑞士军刀”,将为你揭开它神秘的面纱。从“前缀函数”的精巧构造,到KMP算法的闪电出击,我们将带你领略算法之美,轻松解决P3375【模板】KMP字符串匹配的挑战。准备好,一起进入高效字符串匹配的奇妙世界!

前缀函数与 KMP 算法

int p[N]={-1};

void kmp(string s1, string s2){
    int i=1, j=0, n1=s1.size(), n2=s2.size();
    while(i<n2 && j<n2){
        if(j==-1 || s2[i]==s2[j]) p[++i]=++j;
        else j=p[j];
    }

    i=0, j=0;
    while(i<n1 && j<n2){
        if(j==-1 || s1[i]==s2[j]) i++, j++;
        else j=p[j];
        if(j==n2){
            printf("%d\n",i-n2+1);
            j=p[j];
        }
    }
}

学习,便是发现自己越来越菜的过程
最后更新于 2025-11-20