POJ2406 Power Strings【KMP】
2015-04-21 10:21
267 查看
题目链接:
http://poj.org/problem?id=2406
题目大意:
给定两个字符串a和b,定义a*b为两个字符串的链接。比如,a = "abc",b = "def",则
a*b ="abcdef"。这个定义当作是多项式。则一个字符串的非负整数次幂可定义如下:
a^0 = "",a^(n+1) = a*a^n。
现在给你一个字符串s,求出最大的n,满足s = a^n(a为s的某个子串)。比如s = "aaaa",
则n最大为4,a = "a",s = "a"^4。
思路:
对于给定的字符串s,最短的重复子串a是s[Next[len]] s[Next[len+1]] … s[len-1]。当
len % Next[len] = 0时,说明字符串s有不是它本身重复子串a,最大的n为len/Next[len]。
当len % Next[len] != 0时,除了s,没有重复子串a满足要求,这时n = 1。
AC代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
char str[1000010];
int Next[1000010],len;
void GetNext()
{
int i = 0,j = -1;
Next[0] = -1;
while(i <= len)
{
if(j == -1 || str[i]==str[j])
{
i++,j++;
Next[i] = j;
}
else
j = Next[j];
}
}
int main()
{
while(cin >> str && strcmp(str,".")!=0)
{
len = strlen(str);
GetNext();
if(len % (len-Next[len]) == 0)
cout << len/(len-Next[len]) << endl;
else
cout << 1 << endl;
}
return 0;
}
http://poj.org/problem?id=2406
题目大意:
给定两个字符串a和b,定义a*b为两个字符串的链接。比如,a = "abc",b = "def",则
a*b ="abcdef"。这个定义当作是多项式。则一个字符串的非负整数次幂可定义如下:
a^0 = "",a^(n+1) = a*a^n。
现在给你一个字符串s,求出最大的n,满足s = a^n(a为s的某个子串)。比如s = "aaaa",
则n最大为4,a = "a",s = "a"^4。
思路:
对于给定的字符串s,最短的重复子串a是s[Next[len]] s[Next[len+1]] … s[len-1]。当
len % Next[len] = 0时,说明字符串s有不是它本身重复子串a,最大的n为len/Next[len]。
当len % Next[len] != 0时,除了s,没有重复子串a满足要求,这时n = 1。
AC代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
char str[1000010];
int Next[1000010],len;
void GetNext()
{
int i = 0,j = -1;
Next[0] = -1;
while(i <= len)
{
if(j == -1 || str[i]==str[j])
{
i++,j++;
Next[i] = j;
}
else
j = Next[j];
}
}
int main()
{
while(cin >> str && strcmp(str,".")!=0)
{
len = strlen(str);
GetNext();
if(len % (len-Next[len]) == 0)
cout << len/(len-Next[len]) << endl;
else
cout << 1 << endl;
}
return 0;
}
相关文章推荐
- 【POJ2406】Power Strings(KMP,后缀数组)
- POJ2406 Power Strings(kmp)
- poj2406 Power Strings 简单KMP
- poj2406 power strings 【KMP】
- poj2406 Power Strings (KMP)
- 【KMP】 poj2406 Power Strings
- 【POJ2406】Power Strings(KMP与最小循环节的故事)
- poj2406--Power Strings(KMP求最小循环节)
- 【POJ2406】Power Strings-KMP中next数组的应用
- 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)
- LA3026 POJ1961 period 字符串周期(KMP) POJ2406 Power Strings
- poj2406-Power Strings(kmp)
- poj2406 Power Strings(kmp失配函数)
- poj2406--Power Strings(kmp:求循环串的次数)