• Java实现 LeetCode 516 最长回文子序列


    516. 最长回文子序列

    给定一个字符串s,找到其中最长的回文子序列。可以假设s的最大长度为1000。

    示例 1:
    输入:

    “bbbab”
    输出:

    4
    一个可能的最长回文子序列为 “bbbb”。

    示例 2:
    输入:

    “cbbd”
    输出:

    2
    一个可能的最长回文子序列为 “bb”。

    PS:
    动态规划,
    第一个就不多说了,dp【i】【j】就是截取后i位,然后挨着截取后i位的第j位
    相等就+2,不相等找【i+1】【j】和【i】【j-1】中最大的
    第二个,根据第一个我一直是用的我的上一个,因为我是i越来越小
    然后直接用两个数组,一个保存上一个,一个记录现在,
    然后替换即可

    class Solution {
        //    public int longestPalindromeSubseq(String s) {
        //     if (s == null || s.length() == 0) {
        //         return 0;
        //     }
        //     int n = s.length();
        //     int[][] dp = new int[n][n];
        //     for (int i = n - 1; i >= 0; i--) {
        //         dp[i][i] = 1;
        //         for (int j = i + 1; j < n; j++) {
        //             if (s.charAt(i) == s.charAt(j)) {
        //                 dp[i][j] = dp[i + 1][j - 1] + 2;
        //             } else {
        //                 dp[i][j] = Math.max(dp[i + 1][j], dp[i][j - 1]);
        //             }
        //         }
        //     }
        //     return dp[0][n - 1];
        // }
    
        
        public int longestPalindromeSubseq(String s) {
            char[] chars=s.toCharArray();
            int length=s.length();
            int[] current=new int[length];
            int[] pre =new int[length]; 
            for(int i=length-1;i>=0;i--){
                current[i]=1;
                for(int j=i+1;j<length;j++){
                    if(chars[i]==chars[j]){
                        current[j]=pre[j-1]+2;
                    }else{
                        current[j]=Math.max(current[j-1],pre[j]);
                    }
                }
                int[] tmp=pre;
                pre=current;
                current=tmp;
            }
            return pre[length-1];
        }
        
    }
    
  • 相关阅读:
    UVA.12096 The SetStack Computer ( 好题 栈 STL混合应用)
    HDOJ(HDU).1412 {A} + {B} (STL SET)
    UVA.10474 Where is the Marble ( 排序 二分查找 )
    HDOJ(HDU).1754 I Hate It (ST 单点替换 区间最大值)
    HDOJ(HDU).1166 敌兵布阵 (ST 单点更新 区间求和)
    17 西安
    17 沈阳
    13 南京
    10/11 作战会议
    2019牛客国庆集训派对day5
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13074984.html
Copyright © 2020-2023  润新知