kmp模板
#include<iostream>
#include<cstring> //用trlen
using namespace std;
const int N = 1e6 + 10;
char s[N], p[N]; //s为匹配串,p为模板串
int ne[N]; //记录p的next数组
int main() {
scanf("%s%s", s + 1,p + 1); //从1开始读入
int len_p = strlen(p + 1),len_s = strlen(s + 1);
for (int i = 2, j = 0; i <= len_p; i ++ ) //j是前缀倒是第二个字母位置,i是后缀最后一个位置
{
while (j && p[i] != p[j + 1]) j = ne[j]; //不想等就回溯
if (p[i] == p[j + 1]) j ++ ; //相等就继续
ne[i] = j; //记录
}
for (int i = 1, j = 0; i <= len_s; i ++ ) //i指向匹配串,j指向模板串
{
while (j && s[i] != p[j + 1]) j = ne[j];
if (s[i] == p[j + 1]) j ++ ;
if (j == len_p) //匹配成功
{
printf("%d\n",i - len_p + 1);
j = ne[j]; //回溯到??
// 匹配成功后的逻辑
}
}
for(auto i = 1;i <= len_p;++i) cout << ne[i] << ' ';
}
感觉懂了!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!