KMP
来源:互联网 发布:日程软件 知乎 电脑 编辑:程序博客网 时间:2024/05/21 02:19
推荐视频:http://www.bilibili.com/mobile/video/av3246487.html
Problem Description
For each prefix of a given string S with N characters (each character has an ASCII code between 97 and 126, inclusive), we want to know whether the prefix is a periodic string. That is, for each i (2 <= i <= N) we want to know the largest K > 1 (if there is one) such that the prefix of S with length i can be written as AK , that is A concatenated K times, for some string A. Of course, we also want to know the period K.
Input
The input file consists of several test cases. Each test case consists of two lines. The first one contains N (2 <= N <= 1 000 000) – the size of the string S. The second line contains the string S. The input file ends with a line, having the number zero on it.
Output
For each test case, output “Test case #” and the consecutive test case number on a single line; then, for each prefix with length i that has a period K > 1, output the prefix size i and the period K separated by a single space; the prefix sizes must be in increasing order. Print a blank line after each test case.
Sample Input
3
aaa
12
aabaabaabaab
0
Sample Output
Test case #1
2 2
3 3
Test case #2
2 2
6 2
9 3
12 4
#include<stdio.h>#include<string.h>int lena,lenb;char a[1000010];int next[1000010];void get_next(){int i=1,j=0;next[0]=0;while(i<lena){if(j>0 && a[i]!=a[j]){j=next[j-1];}else if(j==0 && a[i]!=a[j]){next[i]=0;i++;}else{next[i]=j+1;i++;j++;}}//for(i=0;i<lena;i++)//printf("%d ",next[i]);int k=0;for(i=1;i<lena;i++){k=i+1-next[i];if((i+1)%k==0 && next[i]!=0)printf("%d %d\n",i+1,(i+1)/k); }}int main() {int len,i,flag=0;while(scanf("%d",&lena),lena!=0){scanf("%s",a);flag++;//if(flag>1)//printf("\nTest case #%d\n",flag);//elseprintf("Test case #%d\n",flag);get_next();printf("\n");}return 0;}
- KMP
- KMP
- KMP
- KMP
- KMP
- KMP
- kmp
- kmp
- KMP
- kmp
- KMP
- KMP
- KMP
- kmp
- KMP
- KMP
- kmp
- KMP
- 浅谈死锁
- 深入理解计算机系统(CSAPP)课程实验bomb程序炸弹实验日志(phase_5)
- 驾驶证识别,OCR识别技术共同推进人工智能
- Android上手机软件调用外部地图软件
- LeetCode 367. Valid Perfect Square
- KMP
- 进程同步与互斥
- HTTP中application/x-www-form-urlencoded字符说明
- FFT—快速傅里叶变换学习小记
- android中使用对象池 ----- Pools
- RBtree详解之删除(含完整红黑树代码)
- 线段树
- C基础 对字符串数组的sizeof和strlen的区别
- Retrofit 注解 详解