题意:
对于长度为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; } };
时间复杂度:空间复杂度: