您的位置:首页 > 其它

初步实现最长回文子串

2016-04-19 12:00 232 查看
#include <bits/stdc++.h>
using namespace std;
#define clr(ar,val) memset(ar,val,sizeof(ar))
#define MAXN 110000
char tmp[MAXN];
char extmp[MAXN*2];
int main(){
while(scanf("%s",tmp) !=EOF){
int len = strlen(tmp);
int rs = 0;
int j = 0;
clr(extmp,'\0');
for(int i=0;tmp[i] != '\0';++i){
extmp[j++] = '0';
extmp[j++] = tmp[i];
}
extmp[j]='0';
for(int i=0;i<=j;++i){
int start = i -1;
int end = i +1;
int l = 0;
while(start >=0 && end <= j){
if(extmp[start] == extmp[end])l++;
else break;
start--;
end++;
}
if(l > rs)rs = l;
}
printf("%d\n",rs);
}
return 0;
}

以上方法是处理了奇数字符串长度和偶数字符串长度的方法,也是manacher的初步实现的处理的方法。

以上代码思路是以某一个字符为中心,2边扩展,left--,right++ 直到出边界为止。

以上代码在ac中会超时,仅仅提供新手入门参考。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: