KMP poj 3461

原创 2013年12月03日 11:30:46

    找一个模式串在主串中出现的次数

#include <iostream>
#include <cstring>

using namespace std;

const int MAXN = 1000010;
const int MAXM = 10010;

int nextval[MAXM];

void Get_NextVal(char* str)
{
	int len = strlen( str );
	int i = 0, j = -1;
	nextval[0] = -1;
	while (i < len)
	{
		if (j == -1 || str[i] == str[j])
		{
			++i;
			++j;
			if(str[i] == str[j])
				nextval[i] = nextval[j];
			else
				nextval[i] = j;
		}
		else
			j = nextval[j];
	}
}


int KMP(char* str1, char* str2)
{
	int i = 0, j = 0;
	int ans = 0;
	int len1 = strlen(str1);
	int len2 = strlen(str2);
	Get_NextVal(str1);
	while (i < len2)
	{
		if (j == -1 || str1[j] == str2[i])
		{
			++i;
			++j;
		}
		else
			j = nextval[j];
		if(j >= len1)
		{
			ans++;
			j = nextval[j];//这里不是从模式串的首部从新开始,而是从他的nextval开始
		}
	}
	return ans;
}


int main()
{
	int T;
	cin>>T;
	char str1[MAXM], str2[MAXN];
	while (T--)
	{
		cin>>str1;
		cin>>str2;
		int sum = 0;
		sum = KMP(str1, str2);
		cout<<sum<<endl;
	}
	return 0;
}


版权声明:本文为博主原创文章,转载需注明出处。

POJ3461 字符串哈希

#include #include #include #include #include #include #include #include #include #include #include u...
  • u013654696
  • u013654696
  • 2014年02月13日 16:50
  • 534

poj 3461 Oulipo (KMP||hash)

Oulipo Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 35267   Accepted: 14255 ...
  • yjf3151731373
  • yjf3151731373
  • 2016年08月02日 15:20
  • 109

字符串hash - POJ 3461 Oulipo

Oulipo  Problem's Link ------------------------------------------------------------------...
  • u013371163
  • u013371163
  • 2017年03月05日 17:13
  • 124

poj 3461 字符串单串匹配--KMP或者字符串HASH

http://poj.org/problem?id=3461 先来一发KMP算法: #include #include #include #include #include #inc...
  • u011026968
  • u011026968
  • 2014年08月09日 21:11
  • 976

POJ3461 字符串HASH

#include #include #include #define ull unsigned long long const ull B = 1e8+7; const int MAXN...
  • cnyali
  • cnyali
  • 2015年08月09日 12:38
  • 415

POJ 3461 Oulipo(KMP字符串匹配)

题意  给你两个字符串p和s  求p在s中出现的次数  很裸的kmp 因为不止匹配一次  每次找到后还要循环j=next[j]的过程   知道到达s的终点 #include #include usin...
  • jd503058037
  • jd503058037
  • 2014年08月14日 19:57
  • 851

poj 3461 KMP模式串匹配

Oulipo Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 33539   Accepted: 13568 ...
  • liu940204
  • liu940204
  • 2016年05月07日 22:44
  • 476

hdu3461Code Lock【并查集+快速幂】

Problem Description A lock you use has a code system to be opened instead of a key. The lock contai...
  • zhou_yujia
  • zhou_yujia
  • 2015年10月09日 21:22
  • 436

POJ 3461

Description The French author Georges Perec (1936–1982) once wrote a book, La disparition, withou...
  • u013790563
  • u013790563
  • 2014年04月18日 16:57
  • 434

poj 3461

#include #include char s[11000],t[1100000]; int next[11000]; void getkmp(int ...
  • u011483306
  • u011483306
  • 2014年04月08日 16:14
  • 346
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:KMP poj 3461
举报原因:
原因补充:

(最多只允许输入30个字)