#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;
}
参考原文:点击打开链接
求字符串的最长回文子串
最新推荐文章于 2023-02-07 18:58:22 发布