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; 
    } 


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

  • 相关阅读:
    dom4j操作xml
    iOS 导航栏的那些事儿
    iOS--定时器(几种定时器的对比)
    iOS--优秀博客记录
    iOS--基础--文件操作
    iOS--动画--GitHub前50名的Objective-C动画相关库
    iOS--资料--类目Category收集
    iOS--资料--开源收集
    iOS--资料--开源项目及库
    ios--控件--自定义封装一个控件
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4888197.html
Copyright © 2011-2022 走看看