您的位置:首页 > 其它

hdu 3336【Count the string】(KMP)

2013-09-26 23:28 357 查看
一道字符串匹配的题目,仅仅借此题练习一下KMP

因为这道题目就是要求用从头开始的n个字符串去匹配原来的字符串,很明显与KMP中求next的过程很相似,所以只要把能够从头开始匹配一定个数的字符串的个数加起来就OK了(再此结果上还应该加上字符串的长度,因为每个从头开始的字符串本身也可以去匹配自己的),即将next中值不为-1和0的个数统计出来即可。

用GCC编译的,时间用了46MS。

#include <stdio.h>
#include <string.h>
#define MAXLEN 200005
#define MOD 10007

int next[MAXLEN];
char myChar[MAXLEN];

int getNext()
{
int i = 0,j = -1;
int sum = 0;
int len = strlen(myChar);
memset(next,0,sizeof(int));

next[i] = j;

while(i < len)
{
if(j == -1 || myChar[i] == myChar[j])
{
i ++;
j ++;
next[i] = j;
if(j != -1 && j != 0)
{
sum ++;
sum = sum % MOD;
}
}
else
{
j = next[j];
}
}

return sum;
}

int main()
{
int n,m;

scanf("%d",&n);
while(n --)
{
scanf("%d",&m);
memset(myChar,0,sizeof(char));
scanf("%s",myChar);
printf("%d\n",(getNext()+m)%MOD);
}

return 0;
}


代码如下:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: