zoukankan      html  css  js  c++  java
  • NYoj-Binary String Matching-KMP算法

    Binary String Matching

    时间限制:3000 ms  |  内存限制:65535 KB
    难度:3
    描写叙述
    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 
    /******KMP算法*********/
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<cmath>
    #include<algorithm>
    //#define MAXSTRLEN  1000
    char s[1010];
    char t[11];
    int next[1010];
    using namespace std;
    void Next()
    {
    	int i=0;
    	int j=-1;
    	next[0]=-1;
    	int len_t=strlen(t);
    	while(i<len_t-1)
    	{
    		if(j==-1||t[i]==t[j])
    		{
    			i++;
    			j++;
    			next[i]=j;
    		}
    		else
    		    j=next[j];
    	}
    }
    int KMP()
    {
    	int i=-1;
    	int j=-1;
    	int len_t=strlen(t);
    	int len_s=strlen(s);
    	int count=0;
    	Next();
    	while(i<len_s)
    	{
    		if(j==-1||s[i]==t[j])
    		{
    			i++;
    			j++;
    		}
    		else
    		{ 
    		      j=next[j];
    	    }
    		if(j==len_t)
    		{
    			i=i-j;
    			j=-1;
    			count++;
    		} 
    	}
    	return count;
    }
    int main()
    {
    	int T;
    	scanf("%d",&T);
    	while(T--)
    	{
    		scanf("%s %s",t,s);
    		printf("%d
    ",KMP());
    	}
    	return 0; 
    } 


    版权声明:本文博主原创文章,可能不会没有任何同意转载!

  • 相关阅读:
    jvm
    深度学习 机器学习
    中小规模机器学习的问题
    threading.Condition()
    实现 TensorFlow 架构的规模性和灵活性
    随机条件场
    使用TensorFlow Serving优化TensorFlow模型
    PDB、PD、PMP、RTB哪个更好?为品牌主解锁程序化购买的选择技巧
    bisecting k-means
    内核futex的BUG导致程序hang死问题排查
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4888197.html
Copyright © 2011-2022 走看看