【POJ 2752 KMP之next】

原创 2013年12月04日 10:32:28

题目链接:http://poj.org/problem?id=2752

#include<iostream>
#include<cstdio>
using namespace std;
char s[400005];
int next[400005],a[400005];
void getnext(char *p,int *next){
	int len=strlen(p);
	next[0]=-1;
	int i=0,k=-1;
	while(i<len){
		if(k==-1 || p[i]==p[k]){
			i++;
			k++;
			next[i]=k;
		}
		else
			k=next[k];
	}
}
int main(){
	while(scanf("%s",s)!=EOF){
		getnext(s,next);
		int len=strlen(s),i,k=0;
		i=len;
		a[0]=len;
		while(next[i]>0){
			
			i=next[i];
			a[++k]=i;
		}
		for(int j=k;j>=0;--j){
			printf("%d",a[j]);
			if(j)
				printf(" ");
		}
		printf("\n");
	}
}

这道题目要求既是前缀字符串又是后缀字符串的所有可能的长度,正好运用了KMP算法里面next数组的意义,要保证结果是针对整个字符串的,所以在next数组中从后往前扫描即可,因为,next数组中,越往后,数字就越大,并且表示的是后缀和前缀相同的最大长度,所以所得到的结果顺序是反的,要求从小到大输出,逆序输出就可以了。

KMP算法的经典例题(poj 3461、poj 2752、poj 2406、poj1961)

传送门:POJ-3461 最简单的KMP题,找出第一个字符串在第二个字符串中出现次数。 #include #include #include #define Memset(x, a) mems...
  • guhaiteng
  • guhaiteng
  • 2016年08月03日 23:48
  • 2814

poj 2752 kmp(next数组模板)

http://poj.org/problem?id=2752 Description The little cat is so famous, that many couples tram...
  • u013573047
  • u013573047
  • 2014年03月25日 13:17
  • 486

poj 2752 kmp(next数组的应用)

Seek the Name, Seek the Fame Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 1603...
  • liu940204
  • liu940204
  • 2016年05月06日 17:33
  • 338

poj 2752 KMP(next数组的运用)

点击打开链接 #include #include #include #include using namespace std; const int M =410000; char b[M]; ...
  • Jeremy1149
  • Jeremy1149
  • 2016年07月21日 22:57
  • 134

KMP 算法之得到next的代码

最近温习了一下KMP算法。现在谈谈我对KMP算法的理解。 KMP算法目的:尽量快的解决单字符串匹配的问题。 一、问题: 主字符串: ababcababababcab 模式串: abababa...
  • henuyx
  • henuyx
  • 2015年03月27日 09:46
  • 3865

KMP算法next数组的理解

KMP算法的基础部分不再多说,详细大家都Google过了。这里做一些总结。 对于KMP算法来说,重点就是 next数组 (也有叫覆盖函数,部分匹配表,lps数组等)。 总之就是 对模式串做...
  • u012846486
  • u012846486
  • 2014年05月04日 16:06
  • 1600

KMP入门级别算法详解--终于解决了(next数组详解)

从几个月之前就开始学习KMP,看了一堆博客跟教程,没有一个整明白。后来找了大神给我口述的,才算是明白了。我用简练的语言再重新描述一下,抛开算法的代码实现,就概念理论来阐述KMP算法。 next数组详解...
  • LEE18254290736
  • LEE18254290736
  • 2017年08月16日 22:55
  • 2621

KMP中next数组的理解

next数组是KMP的核心,但对于next数组我们总是有时候感觉明白了,但有时候又感觉没明白,现在我就说下我自己对KMP中next数组的理解,首先next[i]上的数字的意义,next[i]表示的是当...
  • u013761036
  • u013761036
  • 2014年05月18日 13:21
  • 1143

详解又详解KMP中的next和nextval的算法

一、定义KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。二、图解原理以下借...
  • nanami809
  • nanami809
  • 2015年10月23日 22:18
  • 3498

KMP算法NEXT数组计算方法

KMP算法: 关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是实现一个next()函数,函数本身包含了模式串的局部匹配信息。时间复杂度O(m+n)。 个...
  • zero9988
  • zero9988
  • 2017年03月05日 23:24
  • 548
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【POJ 2752 KMP之next】
举报原因:
原因补充:

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