码迷,mamicode.com
首页 > 其他好文 > 详细

Binary String Matching

时间:2015-01-13 01:33:32      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:kmp

  • 描述

  • 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
/*最初用的BF算法,后来又改成KMP算法,初次接触KMP算法,还不是太理解。
上代码*/
#include <stdio.h>
#include <string.h>

void GetNext(char *p,int *next)
{
	int j = 0, k = -1;
	*next = -1;
    while(*(p+j)!=‘\0‘)
    {
        if(k==-1||*(p+j)==*(p+k))    
        {
            j++;
            k++;
            *(next+j)=k;
        }
        else                   
            k=*(next+k);
    }
}

int KMPMatch(char *a1, char *a2)
{
	int next[11];
	int i,j,num;
	i=j=num=0;
	GetNext(a1,next);
	while(*(a1+i)!=‘\0‘&&*(a2+j)!=‘\0‘)
	{	if(-1 == i || *(a1+i)==*(a2+j))
		{
			++i;
			++j;
		}
		else
		{
			i=next[i];			
		}
		if(*(a1+i)==‘\0‘)
		{
			++num;
			j=j-i+1;
			i=0;
		}
	
	}
	return num;
}

int main()
{
	int n;
	char a1[11], a2[1000];
	scanf("%d",&n);
	getchar();
	while(n--)
	{
		scanf("%s",a1);
		getchar();
		scanf("%s",a2);
		getchar();
		printf("%d\n",KMPMatch(a1,a2));
	}
	return 0;
}


Binary String Matching

标签:kmp

原文地址:http://anglecode.blog.51cto.com/5628271/1602637

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!