#1015 : KMP算法 裸kmp

来源:互联网 发布:js dom编程艺术 pdf 编辑:程序博客网 时间:2024/05/30 22:57

输入

第一行一个整数N,表示测试数据组数。

接下来的N*2行,每两行表示一个测试数据。在每一个测试数据中,第一行为模式串,由不超过10^4个大写字母组成,第二行为原串,由不超过10^6个大写字母组成。

其中N<=20

输出

对于每一个测试数据,按照它们在输入中出现的顺序输出一行Ans,表示模式串在原串中出现的次数。

#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>using namespace std;char mo[10005];char str[1000005];int next[10005] ;int main(){    int t;    scanf("%d", &t);    while(t--)    {        memset(next,-1,sizeof(next));        scanf("%s%s", mo, str);        int i = 0, j = -1, len = strlen(mo);        while(i < len)  //构造next函数        {            if(j == -1 || mo[i] == mo[j])                next[++i] = ++j;            else                j = next[j];        }        int ans = 0, len1 = strlen(str);        i = j = 0;        while(i < len1) //模式串匹配原串        {            if(j == -1 || str[i] == mo[j])                ++i, ++j;            else                j = next[j];            if(j == len)                ans++;        }        printf("%d\n", ans);    }    return 0;}


0 0