poj2406 Power Strings(KMP)
2017-06-26 15:42
239 查看
Power Strings
DescriptionGiven two strings a and b we define a*b to be their concatenation. For example, if a = “abc” and b = “def” then a*b = “abcdef”. If we think of concatenation as multiplication, exponentiation by a non-negative integer is defined in the normal way: a^0 = “” (the empty string) and a^(n+1) = a*(a^n).
Input
Each test case is a line of input representing s, a string of printable characters. The length of s will be at least 1 and will not exceed 1 million characters. A line containing a period follows the last test case.
Output
For each s you should print the largest n such that s = a^n for some string a.
题意:给定一个字符串,让你求出他最多由几个相同的连续子串连接而成。
分析:在这里我们假设这个字符串的长度是len,那么如果len可以被len-next[len]整除的话,我们就可以说len-next[len]就是那个最短子串的长度。
代码
#include <cstdio> #include <string> using namespace std; int l,p[1000000]; char a[1000000]; int main() { while (scanf("%s",a),a[0]!='.') { l=strlen(a); p[0]=-1; int j=-1; for (int i=1;i<l;i++) { while ((j>-1)&&(a[j+1]!=a[i])) j=p[j]; if (a[j+1]==a[i]) j++; p[i]=j; } int ans=1; if (l%(l-p[l-1]-1)==0) ans=l/(l-p[l-1]-1); printf("%d\n",ans); } }
相关文章推荐
- poj2406-Power Strings(kmp)
- LA3026 POJ1961 period 字符串周期(KMP) POJ2406 Power Strings
- poj2406 Power Strings (kmp)
- poj2406 Power Strings(kmp失配函数)
- poj2406--Power Strings(kmp:求循环串的次数)
- poj2406 Power Strings(kmp求最小循环节)
- POJ2406 Power Strings(KMP,循环节)
- 【POJ2406】 Power Strings (KMP)
- 【poj2406】Power Strings——KMP
- poj2406--Power Strings (KMP)
- 【POJ2406】【KMP】Power Strings
- kmp杂题1 poj2406 Power Strings
- 【kmp】【poj2406】Power Strings
- [poj2406]Power Strings KMP
- 【KMP求最小周期】POJ2406-Power Strings
- poj2406 Power Strings 简单KMP
- 【POJ2406】Power Strings(KMP,后缀数组)
- POJ2406 Power Strings(kmp)
- poj2406 Power Strings (KMP)
- 【KMP】 poj2406 Power Strings