hdu 3336【Count the string】(KMP)
2013-09-26 23:28
357 查看
一道字符串匹配的题目,仅仅借此题练习一下KMP
因为这道题目就是要求用从头开始的n个字符串去匹配原来的字符串,很明显与KMP中求next的过程很相似,所以只要把能够从头开始匹配一定个数的字符串的个数加起来就OK了(再此结果上还应该加上字符串的长度,因为每个从头开始的字符串本身也可以去匹配自己的),即将next中值不为-1和0的个数统计出来即可。
用GCC编译的,时间用了46MS。
代码如下:
因为这道题目就是要求用从头开始的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; }
代码如下:
相关文章推荐
- [KMP-NEXT数组特性]HDU 3336 Count the string
- HDU 3336 Count the string(KMP)
- HDU 3336 Count the string(kmp next数组的性质)
- HDU 3336 Count the string(kmp数组)
- Hdu-3336-Count the string-【KMP】
- hdu 3336: Count the string(KMP dp)
- 【HDU-3336-count the string】(KMP)
- HDU 3336 Count the string(kmp+dp)
- Count the string HDU - 3336 (KMP next 不一样的用法(动态规划))
- HDU 3336 Count the string KMP+DP
- 【HDU 3336】Count the string(kmp)
- hdu 3336 Count the string(KMP)
- hdu 3336 Count the string (kmp扩展)
- Hdu 3336 Count the String(DP+KMP)(好题)
- hdu 3336 Count the string 【kmp + dp】
- HDU_3336 Count the string(KMP)
- hdu 3336 Count the string(KMP)
- HDU 3336 Count the string KMP+DP
- HDU 3336 Count the string (kmp+dp)
- hdu 3336 Count the string(KMP+dp)