zoukankan      html  css  js  c++  java
  • nyoj 5 Binary String Matching(kmp)

    Binary String Matching

     
     
    描述
    Given two strings A and B, whose alphabet consist only ‘0’ and ‘1’. Your task is only to tell how many times does A appear as a substring of B? For example, the text string B is ‘1001110110’ while the pattern string A is ‘11’, you should output 3, because the pattern A appeared at the posit
     
    输入
    The first line consist only one integer N, indicates N cases follows. In each case, there are two lines, the first line gives the string A, length (A) <= 10, and the second line gives the string B, length (B) <= 1000. And it is guaranteed that B is always longer than A.
    输出
    For each case, output a single line consist a single integer, tells how many times do B appears as a substring of A.
    样例输入
    3
    11
    1001110110
    101
    110010010010001
    1010
    110100010101011 
    样例输出
    3
    0
    3 

     1 #include<cstdio>
     2 #include<cstring>
     3 using namespace std;
     4 
     5 int next[105];
     6 
     7 void getnext(char *s)
     8 {
     9     int len=strlen(s);
    10     int i=0,j=-1;
    11     next[i]=j;
    12     while(i<len)
    13     {
    14         if(j==-1||s[i]==s[j])
    15         {
    16             i++;
    17             j++;
    18             next[i]=j;
    19         }
    20         else
    21             j=next[j];
    22     }
    23 }
    24 
    25 int kmp(char *s1,char *s2)
    26 {
    27     int res=0;
    28     int len1=strlen(s1);
    29     int len2=strlen(s2);
    30     getnext(s2);
    31     int i=0,j=0;
    32     while(i<len1)
    33     {
    34         if(j==-1||s1[i]==s2[j])
    35         {
    36             i++;
    37             j++;
    38             if(j==len2)
    39                 res++;
    40         }
    41         else
    42             j=next[j];
    43     }
    44     return res;
    45 }
    46 
    47 int main()
    48 {
    49     int T;
    50     char sub[15],s[1005];
    51     scanf("%d",&T);
    52     while(T--)
    53     {
    54         scanf("%s",sub);
    55         scanf("%s",s);
    56         getnext(sub);
    57         int ans=kmp(s,sub);
    58         printf("%d
    ",ans);
    59     }
    60     return 0;
    61 }
  • 相关阅读:
    两个三汇API使用的坑
    呼叫中心系统架构
    呼叫中心搭建的前期准备步骤
    呼叫中心基础知识
    一步一步开发呼叫中心
    富文本框保存和显示问题
    WebApi和Andriod对接上传和下载文件
    WebApi和Andriod对接访问模式问题
    Sql Server Report Service 的部署问题
    Web API 路由访问设置
  • 原文地址:https://www.cnblogs.com/homura/p/4915168.html
Copyright © 2011-2022 走看看