• NYOJ:Binary String Matching(kmp)


    http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=5

    描述

    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 

    求出b字符串在a支付串中出现了几次。kmp算法

    #include<stdio.h>
    #include<string.h>
    #define N 1020
    int next[N],len1,len2;
    char a[N],b[N];
    void get_next()
    {
    	int i=0,j=-1;
    	next[0]=-1;
    	while(i<len2)
    	{
    		if(b[i]==b[j]||j==-1)
    		{
    			i++;
    			j++;
    			next[i]=j;
    		}
    		else
    			j=next[j];
    	}
    }
    int kmp()
    {
    	int ans=0;
    	get_next();
    	int i=0,j=0;
    	while(i<len1)
    	{
    		if(a[i]==b[j]||j==-1)
    		{
    			i++;
    			j++;
    		}
    		else
    			j=next[j];
    		if(j>=len2)
    		{
    			ans++;
    			j=next[j];
    		}
    	}
    	return ans;
    }
    int main()
    {
    	int t;
    	scanf("%d",&t);
    	while(t--)
    	{
    		scanf("%s%s",b,a);
    		memset(next,0,sizeof(next));
    		len1=strlen(a);
    		len2=strlen(b);
    		printf("%d
    ",kmp());
    	}
    	return 0;	
    } 
  • 相关阅读:
    ftp
    vmware虚拟机如何安装ubuntu14.10系统
    第1章 初识java----Java简介
    fiddler
    Program Files 与Program Files (x86)
    跟我一起认识axure(三)
    React-FlipOver-Counter(日历翻页)
    vue2-vux-fitness-project
    cloud-music
    跟我一起认识axure(二)
  • 原文地址:https://www.cnblogs.com/zyq1758043090/p/10056601.html
Copyright © 2020-2023  润新知