HDU1686 kmp算法

来源:互联网 发布:js 字符串寻找子串 编辑:程序博客网 时间:2024/06/06 00:04

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1686

有关kmp算法介绍的链接:
http://blog.csdn.net/u011564456/article/details/20862555?utm_source=tuicool&utm_medium=referral

题意:输入两个字符串,问第一个字符串在第二个在字符串中出现的次数;

思路:由于数据较大使用kmp算法,这题算是kmp算法的模板题;

#include<stdio.h>#include<string.h>char s[10005];char t[1000005];int next[10005];void getnext(int n){    int i=0,j=-1;    next[0]=-1;    while(i<n)    {        if(j==-1||s[i]==s[j])        next[++i]=++j;        else j=next[j];    }}int kmp(int n,int m){    int i=0,j=0,sum=0;    while(i<m)    {        if(j==-1||s[j]==t[i])        ++i,++j;        else j=next[j];        if(j==n) sum++;    }    return sum;}int main(){    int tt;    scanf("%d",&tt);    while(tt--)    {        scanf("%s %s",s,t);        int n=strlen(s);        int m=strlen(t);        getnext(n);        int sum=kmp(n,m);         printf("%d\n",sum);    }    return 0;}

新人上路,多多关照;

1 0
原创粉丝点击