匹配 (KMP)

来源:互联网 发布:网络配置代码 编辑:程序博客网 时间:2024/06/05 05:56

10.28

这里写图片描述

思路:
简单kmp,特判一下就好。

#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#define LL long long#define N 400010//using namespace std;int lena, lenb, len;char a[N], b[2];int nxt[N];void calcnext() {    int i = 0, j = -1;    nxt[0] = -1;    while(i < len) {        if(j == -1 || a[i] == a[j]) {            i++, j++;            nxt[i] = j;        }        else            j = nxt[j];    }}int main(){    freopen ("string.in", "r", stdin);    freopen ("string.out", "w", stdout);    int T; scanf("%d", &T);    while ( T-- ){        scanf("%d%d", &lena, &lenb);        scanf("%s%s", a, b);        for(int i=0; i<lenb; i++){            a[i+lena] = a[i];        }        a[lenb + lena] = b[0];        len = lena + lenb + 1;        calcnext();        while ( nxt[len] > lenb + 1 || nxt[len] > lena ) len = nxt[len];        printf("%d\n", nxt[len]);    }}
原创粉丝点击