`
人生难得糊涂
  • 浏览: 117415 次
社区版块
存档分类
最新评论

POJ2752--KMP求所有可能的相同前缀后缀

 
阅读更多

题意:求既是前缀又是后缀的前缀的可能的长度

 

忙着考试,好几天没做题了,今天做了几道KMP都是1A,但这道题Output Limit Exceeded 了一次  原因是循环输入的时候没有判断是否遇到了文件末尾

 

思路比较简单:一直用next下去即可  最后逆序输出

#include "iostream"
using namespace std;
#define maxsize 400010
char c[maxsize];
int next[maxsize];
int len;
int prin[maxsize];
void get_next()
{
	int i=0;
	int j=-1;
	next[0]=-1;
	while(i<len)
	{
		if (j==-1||c[i]==c[j])
		{
			i++;
			j++;
			next[i]=j;
		}
		else
		{
			j=next[j];
		}
	}
}
int main()
{
	while (scanf("%s",c)!=EOF)//判断是否文件末尾
	{
		
		len=strlen(c);
		get_next();
	
		int temp=next[len];
		int i=0;
		while (temp!=0)
		{
			prin[i++]=temp;
			temp=next[temp];
		}
		while(i--)
		{
			printf("%d ",prin[i]);
		}
		printf("%d\n",len);
	}
}

 

分享到:
评论

相关推荐

    acm新手刷题攻略之poj

    ### ACM新手刷题攻略之POJ 在ACM竞赛领域,特别是对于初学者而言,选择合适的平台进行训练至关重要。POJ(Peking University Online Judge)作为国内最早且最知名的在线评测系统之一,拥有丰富的题库资源,对于提高...

    KMP.rar_kmp poj

    例如,一个典型的POJ题目可能要求找出一个大文本中所有出现某个特定子串的位置。运用KMP算法,我们可以快速找到所有匹配的位置,而不会因为重复比较而导致时间复杂度过高。通过不断调整和优化,KMP算法可以适应各种...

    KM匹配题集

    KMP算法的核心是构造一个部分匹配表(也叫失配表),它记录了在子串中每次前缀与后缀相同时,可以跳过的字符数量,从而减少了不必要的比较次数。 1. **构建部分匹配表** - 首先,我们对子串进行预处理,构建一个...

    ACM算法总结--最新总结的ACM算法

    1. **后缀数组**(如poj2488, poj3083, poj3009, poj1321, poj2251):用于快速查找字符串的所有子串位置,适用于基因序列分析、文本相似度计算等领域。 2. **AC自动机**(如poj3278, poj1426, poj3126, poj3087, ...

    感觉比较好的一个数据结构知识的总结 .docx

    - 表达式的求值与转换,例如中缀表达式转后缀表达式。 - 辅助其他算法,如计算几何中的凸包算法。 ##### 2. 队列 - **定义**:队列是一种先进先出(FIFO, First In First Out)的线性数据结构。 - **特点**:在...

Global site tag (gtag.js) - Google Analytics