题意:求既是前缀又是后缀的前缀的可能的长度
忙着考试,好几天没做题了,今天做了几道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(Peking University Online Judge)作为国内最早且最知名的在线评测系统之一,拥有丰富的题库资源,对于提高...
例如,一个典型的POJ题目可能要求找出一个大文本中所有出现某个特定子串的位置。运用KMP算法,我们可以快速找到所有匹配的位置,而不会因为重复比较而导致时间复杂度过高。通过不断调整和优化,KMP算法可以适应各种...
KMP算法的核心是构造一个部分匹配表(也叫失配表),它记录了在子串中每次前缀与后缀相同时,可以跳过的字符数量,从而减少了不必要的比较次数。 1. **构建部分匹配表** - 首先,我们对子串进行预处理,构建一个...
1. **后缀数组**(如poj2488, poj3083, poj3009, poj1321, poj2251):用于快速查找字符串的所有子串位置,适用于基因序列分析、文本相似度计算等领域。 2. **AC自动机**(如poj3278, poj1426, poj3126, poj3087, ...
- 表达式的求值与转换,例如中缀表达式转后缀表达式。 - 辅助其他算法,如计算几何中的凸包算法。 ##### 2. 队列 - **定义**:队列是一种先进先出(FIFO, First In First Out)的线性数据结构。 - **特点**:在...