zoukankan      html  css  js  c++  java
  • hdu 3336【Count the string】(KMP)

    一道字符串匹配的题目,仅仅借此题练习一下KMP

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

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

     1 #include <stdio.h>
     2 #include <string.h>
     3 #define MAXLEN 200005
     4 #define MOD 10007
     5 
     6 int next[MAXLEN];
     7 char myChar[MAXLEN];
     8 
     9 int getNext()
    10 {
    11     int i = 0,j = -1;
    12     int sum = 0;
    13     int len = strlen(myChar);
    14     memset(next,0,sizeof(int));
    15 
    16     next[i] = j;
    17 
    18     while(i < len)
    19     {
    20         if(j == -1 || myChar[i] == myChar[j])
    21         {
    22             i ++;
    23             j ++;
    24             next[i] = j;
    25             if(j != -1 && j != 0)
    26             {
    27                 sum ++;
    28                 sum = sum % MOD;
    29             }
    30         }
    31         else
    32         {
    33             j = next[j];
    34         }
    35     }
    36 
    37     return sum;
    38 }
    39 
    40 int main()
    41 {
    42     int n,m;
    43 
    44     scanf("%d",&n);
    45     while(n --)
    46     {
    47         scanf("%d",&m);
    48         memset(myChar,0,sizeof(char));
    49         scanf("%s",myChar);
    50         printf("%d
    ",(getNext()+m)%MOD);
    51     }
    52 
    53     return 0;
    54 }
    代码如下:
  • 相关阅读:
    JS中的this
    函数作用域
    全局作用域与变量的声明提前
    立即执行函数与For. . .in语句
    实参可以是任何值
    函数的参数和返回值
    JavaScript创建函数的三种方式
    JavaScript属性名和属性值
    十进制浮点数转换为二进制
    冰雹猜想或角谷定理
  • 原文地址:https://www.cnblogs.com/Shirlies/p/3341958.html
Copyright © 2011-2022 走看看