码迷,mamicode.com
首页 > 其他好文 > 详细

P3375 模板 KMP字符串匹配

时间:2019-05-16 20:32:09      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:[1]   ons   ||   long   字符串匹配   while   c++   ext   type   

P3375 【模板】KMP字符串匹配

来一道模板题,直接上代码。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e6 + 5;
int n, m;
char s1[N], s2[N];
int nxt[N] ;
void Get_next(char *s) {
    int j, L = strlen(s + 1);
    nxt[1] = j = 0;
    for(int i = 2; i <= L; i++) {
        while(j && s[i] != s[j + 1]) j = nxt[j] ;
        if(s[i] == s[j + 1]) j++;
        nxt[i] = j;
    }
}
int main() {
    scanf("%s%s", s1 + 1, s2 + 1);
    Get_next(s2) ;
    int L1 = strlen(s1 + 1), L2 = strlen(s2 + 1) ;
    for(int i = 1, j = 0; i <= L1; i++) {
        while(j > 0 && (j == L2 || s1[i] != s2[j + 1])) j = nxt[j] ;
        if(s1[i] == s2[j + 1]) j++;
        if(j == L2) cout << i - L2 + 1 << '\n' ;
    }
    for(int i = 1; i <= L2; i++) cout << nxt[i] << ' ' ;
    return 0;
}

P3375 模板 KMP字符串匹配

标签:[1]   ons   ||   long   字符串匹配   while   c++   ext   type   

原文地址:https://www.cnblogs.com/heyuhhh/p/10877706.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!