KMP算法

  1. next[i] = j的含义是: 字符串中的[1, j] 和 [i - j + 1, i]是相等的,并且长度最大。
#include<iostream>
using namespace std;
const int N = 1e6 + 10;
char s[N], p[N];
int n, m;
int ne[N];
int main()
{
    cin >> n >> p + 1 >> m >> s + 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;//ne[1] = 0
    }
    
    for(int i = 1, 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)
        {
            printf("%d ", i - n);//输出从零开始的s字符串中和p字符串相等的子字符串的下标。
            j = ne[j];
        }
    }
}

时间复杂度O(2m)

数据结构 文章被收录于专栏

数据结构

全部评论

相关推荐

06-20 17:42
东华大学 Java
凉风落木楚山秋:要是在2015,你这简历还可以月入十万,可惜现在是2025,已经跟不上版本了
我的简历长这样
点赞 评论 收藏
分享
点赞 评论 收藏
分享
zhiyog:哈哈哈哈哈哈哈哈哈哈哈哈哈
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务