POJ 3974 Palindrome
2014-12-30 16:38
381 查看
Palindrome
中文解释:回文
题目链接:
http://poj.org/problem?id=3974
题目大意:
求取字符串str中的最长回文的长度
算法:
Manacher
时间复杂度O(N),空间复杂度O(N),N=strlen(str)。
AC代码:
<span style="font-size:14px;">#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int N_MAX=2000040;
int rad[N_MAX];
char str[N_MAX];
int len;
int Solve()
{
//fill(rad,rad+N_MAX,0);
//scanf("%s",str);
len=strlen(str);
if(len==0)
return 0;
for(int i=2*len+1;i>1;i-=2){
str[i]='#';
str[i-1]=str[i/2-1];
}
str[0]='$';str[1]='#';str[2*len+2]='\0';
/*for(int i=0;i<strlen(str);i++)
printf("%c",str[i]);
printf("\n");*/
int id(0),mx(0),mxrd(0);
for(int i=1;i<=2*len+1;i++){
rad[i]=mx>i?min(rad[2*id-i],mx-i):1;
while(str[i+rad[i]]==str[i-rad[i]])rad[i]++;
if(rad[i]+i>mx){
id=i;
mx=i+rad[i];
}
if(mxrd<rad[i])
mxrd=rad[i];
//printf("%d",rad[i]);
}
return mxrd-1;
}
int main()
{
int i=1;
while(scanf("%s",str)&&str[0]!='E'){
printf("Case %d: %d\n",i,Solve());
//puts(str);
i++;
}
return 0;
}</span>
中文解释:回文
题目链接:
http://poj.org/problem?id=3974
题目大意:
求取字符串str中的最长回文的长度
算法:
Manacher
时间复杂度O(N),空间复杂度O(N),N=strlen(str)。
AC代码:
<span style="font-size:14px;">#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int N_MAX=2000040;
int rad[N_MAX];
char str[N_MAX];
int len;
int Solve()
{
//fill(rad,rad+N_MAX,0);
//scanf("%s",str);
len=strlen(str);
if(len==0)
return 0;
for(int i=2*len+1;i>1;i-=2){
str[i]='#';
str[i-1]=str[i/2-1];
}
str[0]='$';str[1]='#';str[2*len+2]='\0';
/*for(int i=0;i<strlen(str);i++)
printf("%c",str[i]);
printf("\n");*/
int id(0),mx(0),mxrd(0);
for(int i=1;i<=2*len+1;i++){
rad[i]=mx>i?min(rad[2*id-i],mx-i):1;
while(str[i+rad[i]]==str[i-rad[i]])rad[i]++;
if(rad[i]+i>mx){
id=i;
mx=i+rad[i];
}
if(mxrd<rad[i])
mxrd=rad[i];
//printf("%d",rad[i]);
}
return mxrd-1;
}
int main()
{
int i=1;
while(scanf("%s",str)&&str[0]!='E'){
printf("Case %d: %d\n",i,Solve());
//puts(str);
i++;
}
return 0;
}</span>
相关文章推荐
- 【Manacher】 POJ 3974 Palindrome
- POJ 3974 Palindrome (manachr模板题)
- POJ----(3974 )Palindrome [最长回文串]
- POJ 3974 Palindrome Manacher
- 【POJ】3974 Palindrome
- POJ - 3974 Palindrome
- POJ 3974 Palindrome【Manacher】
- [poj] 3974 Palindrome
- POJ:3974 Palindrome (Manacher算法)
- POJ 3974 Palindrome
- POJ 3974 Palindrome 求最长回文子串 Manacher
- poj 3974 Palindrome
- 【POJ 3974】 Palindrome
- poj_3974 Palindrome(最长回文子串)
- POJ 3974 Palindrome
- POJ 3974-Palindrome(Manacher算法)
- POJ 3974 Palindrome
- POJ 3974 Palindrome
- POJ 3974 Palindrome(Manacher)
- 后缀数组 POJ 3974 Palindrome && URAL 1297 Palindrome