zoukankan      html  css  js  c++  java
  • B

    题目大意:

        给一个t,接下来每个t两个串,求能匹配的次数。

    解题思路:

        修改模板kmp,不要j==len就结束while,而是在i==len才结束,由于这里是可重叠的匹配,所以 j==len时,j=next[j],ans++。

    参考代码:

     1 #include <iostream>
     2 #include <vector>
     3 #include <map>
     4 #include <string>
     5 #include <queue>
     6 #include <stack>
     7 #include <set>
     8 #include <algorithm>
     9 
    10 #include <cstdio>
    11 #include <cstring>
    12 #include <cmath>
    13 #include <cstdlib>
    14 using namespace std;
    15 
    16 const int INF=0x3f3f3f3f;
    17 const int SIZE=10000;
    18 typedef long long LL;
    19 
    20 char a[1000005];
    21 char b[10005];
    22 int nextt[10005];
    23 
    24 void nexxt()
    25 {
    26     memset(nextt,0,sizeof(nextt));
    27     int j=0,k=-1;
    28     nextt[0]=-1;
    29     int len=strlen(b);
    30     while(j<len)
    31     {
    32         if(k==-1||b[j]==b[k])
    33         {
    34             ++k;
    35             ++j;
    36             if(b[j]!=b[k])
    37                 nextt[j]=k;
    38             else
    39                 nextt[j]=nextt[k];
    40         }
    41         else
    42             k=nextt[k];
    43     }
    44 }
    45 
    46 int kmp()
    47 {
    48     int i=0,j=0,ans=0;
    49     int la=strlen(a),lb=strlen(b);
    50     while(i<la)
    51     {
    52         //printf("i:%d j:%d
    ",i,j);
    53         if(j==-1||a[i]==b[j])
    54         {
    55             i++;
    56             j++;
    57         }
    58         else
    59             j=nextt[j];
    60         if(j==lb)
    61         {
    62             j=nextt[j];
    63             ans++;
    64         }
    65     }
    66     return ans;
    67 
    68 }
    69 
    70 int main()
    71 {
    72     int t;
    73     scanf("%d",&t);
    74     getchar();
    75     while(t--)
    76     {
    77          gets(b);
    78          gets(a);
    79          nexxt();
    80          printf("%d
    ",kmp());
    81     }
    82     return 0;
    83 }
    View Code
    まだまだだね
  • 相关阅读:
    express基础介绍
    gruntjs
    小写转换大写(人民币)
    Elasticsearch学习系列之多文档操作mget
    java.util.Date和java.sql.Date的使用方法,转载
    spring学习IOC
    oracle10g手动创建scott(tiger)的方法(转)
    观察者模式
    简单工厂,工厂模式,抽象工厂
    win7主机+winxp虚拟机,虚拟机使用主机的无线网卡(转)
  • 原文地址:https://www.cnblogs.com/xxQ-1999/p/7522478.html
Copyright © 2011-2022 走看看