【模板】KMP字符串匹配

P3375 【模板】KMP字符串匹配

 

 

复制代码
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int N =1e6 + 10;
char s[N], p[N];
int ne[N];

int main()
{
    cin >> s >> p;
    int n = (int)strlen(p), m = (int)strlen(s);
    for(int i = n; i >= 1; i --) p[i] = p[i - 1];
    for(int i = m; i >= 1; i --) s[i] = s[i - 1];
    for(int i = 2, j = 0; i <= n; i ++)
    {
        while(j && p[i] != p[j + 1]) j = ne[j];
        if(p[i] == p[j + 1]) j ++;
        ne[i] = j;
    }

    for(int i = 0, j = 0; i <= m; i ++)
    {
        while(j && s[i] != p[j + 1]) j = ne[j];
        if(s[i] == p[j + 1]) j ++;
        if(j == n)
        {
            cout << i - n + 1 << endl;
            j = ne[j];
        }
    }

    for(int i = 1; i <= n; i ++)
    {
        cout << ne[i] << " ";
    }
    cout << endl;

    return 0;
}
复制代码

老大难,KMP问题。

 
posted @   龙雪可可  阅读(110)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
****************************************** 页脚Html代码 ******************************************
点击右上角即可分享
微信分享提示