题意:
对于长度为n的一个字符串A(仅包含数字,大小写英文字母),请设计一个高效算法,计算其中最长回文子串的长度。
方法:
中心拓展法
思路:遍历,以字符串的每个字符作为中心,向左右两边拓展,寻找最长回文子串的长度。分为两种情况:
1)以A[i]作为中心
2)先判断A[i-1]==A[i],如果相等,A[i-1]和A[i]作为中心
class Solution {
public:
int getLongestPalindrome(string A) {
int res=0;
int len=A.size();
for(int i=0;i<len;i++){//遍历字符串
int j=i-1,k=i+1;//以A[i]作为中心
while(j>=0&&k<len){
if(A[j]!=A[k])
break;
j--;
k++;
}
res=max(res,k-j-1);
if(i-1>=0&&A[i-1]==A[i]){//先判断A[i-1]==A[i],如果相等,A[i-1]和A[i]作为中心
j=i-2;
k=i+1;
while(j>=0&&k<len){
if(A[j]!=A[k])
break;
j--;
k++;
}
res=max(res,k-j-1);
}
}
return res;
}
};
时间复杂度:
空间复杂度:![]()



京公网安备 11010502036488号