题目描述
对于一个字符串,请设计一个高效算法,计算其中最长回文子串的长度。
给定字符串A以及它的长度n,请返回最长回文子串的长度。
测试样例:
"abc1234321ab",12
返回:7
解题思路:分为两种进行统计:偶数回文字符串以及奇数回文字符串,对于偶数,不存在中间的元素,因此,i=center-1, 而对于奇数,存在中间的元素,因此i=center+1;
class Palindrome {
public:
int findodd(string A, int center, int n){
int i= center-1;
int j = center+1;
while(i>=0 && j<=n-1){
if(A[i]!=A[j])
return j-1;
i--;
j++;
}
return j-1;
}
int findeven(string A, int center, int n){
int i= center;
int j = center+1;
while(i>=0 && j<=n-1){
if(A[i]!=A[j])
return j-1;
i--;
j++;
}
return j-1;
}
int getLongestPalindrome(string A, int n) {
// write code here
int max=0;
int i,j,center=0;
int end;
for(auto c : A){
end=findodd(A, center, n);
if(max<2*(end-center)+1)
max=2*(end-center)+1;
end=findeven(A, center, n);
if(max<2*(end-center))
max=2*(end-center);
center++;
}
return max;
}
};