您的位置:首页 > 其它

KMP标准模板

2020-04-02 18:36 489 查看

不会的b站找视频去不要对着模板浪费时间(大佬除外)

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<string>
#include<cstring>
using namespace std;
int main(void)
{
int ne[1000005];
char p[1000005], s[1000005];
scanf_s("%s%s", s + 1, p + 1);
ne[1] = 0;
int n = strlen(s+1), m = strlen(p+1);
for (int i = 2, j = 0; i <= m; i++)//忘得真快,妈蛋。这也有点双指针的意思
{
while (j && p[i] != p[j + 1]) j = ne[j];
if (p[i] == p[j + 1]) j++;
ne[i] = j;
}
int j,i;
for ( i = 1, j = 0; i <= n; i++)
{
while (j && s[i] != p[j + 1]) j = ne[j];
if (s[i] == p[j + 1]) j++;
if (j == m)
{
printf("%d\n",i - m + 1);
j = ne[j];

}
}

for (int i = 1; i <= m; i++)
printf("%d ", ne[i]);
return 0;
}
  • 点赞
  • 收藏
  • 分享
  • 文章举报
mrgaohaihang 发布了23 篇原创文章 · 获赞 1 · 访问量 506 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: