题解 | #最长回文子串#

最长回文子串

https://www.nowcoder.com/practice/b4525d1d84934cf280439aeecc36f4af

#include <vector>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param A string字符串 
     * @return int整型
     */
    
    int getLongestPalindrome(string A) {
        // write code here
        int max_len = 0;
        //1. dp[i][j] [i,j]区间内是否为回文子串
        vector<vector<bool>>dp(A.size(),vector<bool>(A.size(),false));
        //2.初始化 全部为false
        
        //3. 递推公式
        for(int i=A.size()-1;i>=0;i--){
            for(int j = i;j<A.size();j++){
                if(A[i] == A[j]){
                    if(j-i<=1){//两种类型 a aa
                        dp[i][j] = true;
                        max_len = max(max_len,j-i+1);
                    }else if(dp[i+1][j-1]){
                        dp[i][j] = true;// c aba c
                        max_len = max(j - i +1,max_len);
                    }
                }
            }
        }
        return max_len;
    }
};
  1. 确定动态数组含义 dp[i][j]:[i,j]区间内是否为回文串
  2. 初始化:全部为false
  3. 递推公式
  4. if(A[i] == A[i])
  5. j-i <= 1:即aa,a这种情形
  6. dp[i][j]=true
  7. dp[i+1][j-1]==true
  8. dp[i][j]=true
  9. 遍历顺序:从递推公式可以看出,从右下开始遍历
全部评论

相关推荐

每晚夜里独自颤抖:要求太多的没必要理
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-20 18:18
是不是意味着秋招就完蛋了
花不开柳成荫:如果你是Java,是的
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务