1、最长回文串 分奇偶讨论(中心扩展法)
class Solution {
public:
int getLongestPalindrome(string A, int n) {
int max_=1;
for(int i=1;i<n-1;i++){
int left=i-1,right=i+1;//奇
while(left>=0&&right<=n&&A[left]==A[right])
left--,right++;
max_=max(max_,right-left-1);
left=i,right=i+1;//偶
while(left>=0&&right<=n&&A[left]==A[right])
left--,right++;
max_=max(max_,right-left-1);
}
return max_;
}
};
2、动态规划
class Solution {
public:
int getLongestPalindrome(string A, int n) {
int max_=1;
vector<vector<bool>> dp(n,vector<bool>(n));
for(int i=0;i<n;i++){//初始化包括长度为1和2
dp[i][i]=true;
if(A[i]==A[i+1])
{
dp[i][i+1]=true;
max_=2;
}
}//状态方程dp[i][j]=A[i]==A[j]? dp[i+1][j-1]:false;
for(int l=3;l<=n;l++){//从3长度开始
for(int i=0;i<n-l+1;i++){
int j=i+l-1;
if(A[i]==A[j]&&dp[i+1][j-1])
{
dp[i][j]=true;
max_=max(max_,l);
}
}
}
return max_;
}
};