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\n",KMP());
	}
	return 0;
} 

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

时间: 2024-10-01 03:31:52

NYoj-Binary String Matching-KMP算法的相关文章

nyoj5 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 '100111011

NYOJ 5 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 '100111011

NYOJ 5 Binary String Matching【string find的运用】

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 '100111011

NYOJ 5 Binary String Matching

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 ‘100111011

NYOJ5 Binary String Matching

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 ‘100111011

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,

喝豆浆 3336 Count the string【kmp算法求前缀在原字符串中出现总次数】

Count the string Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6062    Accepted Submission(s): 2810 Problem Description It is well known that AekdyCoin is good at string problems as well as nu

HDU 3336 Count the string(KMP算法next数组的应用)

解题思路: 求前缀数组出现的次数之和,next[i] > 0 表示长度为next[i]的前缀又出现了一次. #include <iostream> #include <cstring> #include <cstdlib> #include <cstdio> #include <algorithm> #include <cmath> #include <vector> #include <queue> #

NYOJ题目5---Binary String Matching

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 '100111011

字符串匹配——朴素算法、KMP算法

字符串匹配(string match)是在实际工程中经常会碰到的问题,通常其输入是原字符串(String)和子串(又称模式,Pattern)组成,输出为子串在原字符串中的首次出现的位置.通常精确的字符串搜索算法包括朴素搜索算法,KMP, BM(Boyer Moore), sunday, robin-karp 以及 bitap.下面分析朴素搜索算法和KMP这两种方法并给出其实现.假设原字符T串长度N,子串P长度为M. 1.NAIVE-STRING-MATCHING. 朴素算法,该方法又称暴力搜索,