NC17 最长回文子串

题目描述:

对于一个字符串,请设计一个高效算法,计算其中最长回文子串的长度。
给定字符串A以及它的长度n,请返回最长回文子串的长度。

解题分析:

采用动态规划,dp[i][j]表示从下标i到下标j的位置是否是回文串。具体的考虑三种情况:

  • i = j,dp[i][j] = true;
  • j-i == 1, 且A[i] = A[j], dp[i][j] = true;
  • A[i] = A[j],dp[i][j] = dp[i+1][j-1]

注意for循环的层次关系。

class Solution {
    
    
public:
    int getLongestPalindrome(string A, int n) {
    
    
        // write code here
        if(n==0)
            return 0;
        int ans=0;
        vector<vector<int>> dp(n, vector<int>(n));
        dp[0][0]=true;
        for(int right=1; right<n; ++right){
    
    
            for(int left=0; left<n; ++left){
    
    
                if(left>right || A[left]!=A[right]){
    
    
                    continue;
                    }
                if(left==right){
    
    
                    dp[left][right]=true;
                }
                else if(right-left==1){
    
    
                    dp[left][right]=true;
                }
                else{
    
    
                    dp[left][right]=dp[left+1][right-1];
                }
                if(dp[left][right])
                    ans=max(ans, (right-left+1));
            }
        }
        return ans;
    }
};

おすすめ

転載: blog.csdn.net/MaopengLee/article/details/118529204
おすすめ