您的位置:首页 > 其它

求字符串的最长回文子串

2016-03-16 22:30 435 查看
#include <iostream>
#include<string>
using namespace std;
char* change(char *s){//插入特殊符号

int l=strlen(s);
int len=l*2+2;
char *p=new char[len];
p[0]='$';
p[1]='#';
int j=2;
for(int i=0;s[i]!='\0';++i){
p[j++]=s[i];
p[j++]='#';
}
return p;
}
int min(int a, int b){

return b<a?b:a;
}
void Manacher(char *p){
cout<<p<<endl;
int l=strlen(p);
cout<<l<<endl;
int *result=new int[l];
int i, id, mx=0;
for(i=0;i<l;++i){
if(i<mx)
result[i]=min(result[2*id-i],mx-i);
else
result[i]=1;
while(p[i-result[i]]==p[i+result[i]])
++result[i];
if(result[i]>mx){
mx=result[i];
id=i;
}
}

cout<<id<<' '<<mx<<endl;
}
int main(){
char *p="abbbac";
char *temp=change(p);
Manacher(temp);
return 0;
}
参考原文:点击打开链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: