zoukankan      html  css  js  c++  java
  • 【poj 3461】Oulipo(字符串--KMP)

    题意:求子串在文本串中出现了多少次。

    解法:使用KMP的next[ ]和tend[ ]数组计数。

     1 #include<cstdio>
     2 #include<cstdlib>
     3 #include<cstring>
     4 #include<iostream>
     5 using namespace std;
     6 
     7 const int N=10010,M=1000010;
     8 char s[N],ss[M];
     9 int n,m;
    10 int next[N];//,tend[M];
    11 
    12 void kmp()
    13 {
    14     memset(next,0,sizeof(next));
    15     int p=0;
    16     next[1]=0;
    17     for (int i=2;i<=n;i++)
    18     {
    19       while (s[i]!=s[p+1] && p) p=next[p];
    20       if (s[i]==s[p+1]) p++;
    21       next[i]=p;
    22     }
    23     //memset(tend,0,sizeof(tend));
    24     int cnt=0; p=0;
    25     for (int i=1;i<=m;i++)
    26     {
    27       while (ss[i]!=s[p+1] && p) p=next[p];
    28       if (ss[i]==s[p+1]) p++;
    29       //tend[i]=p;
    30       if (p==n) cnt++;
    31     }
    32     printf("%d
    ",cnt);
    33 }
    34 int main()
    35 {
    36     int T;
    37     scanf("%d",&T);
    38     while (T--)
    39     {
    40       scanf("%s%s",s+1,ss+1);
    41       n=strlen(s+1),m=strlen(ss+1);
    42       kmp();
    43     }
    44     return 0;
    45 }
  • 相关阅读:
    记忆的永恒
    放弃我是你的错
    献给我逝去的长辈们清明
    思维的局限,穷人为什么会穷?
    借我一生
    陪你到老
    风雨路途
    人生的十二大财富
    怀才不遇
    javascript变量
  • 原文地址:https://www.cnblogs.com/konjak/p/6075192.html
Copyright © 2011-2022 走看看