zoukankan      html  css  js  c++  java
  • 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];
        }
        
    }
    
  • 相关阅读:
    转 sql 时间转换格式 convert(varchar(10),字段名,转换格式)
    C#页面添加提交数据后跳出小弹窗的功能
    解决粘包问题
    粘包问题
    模拟ssh远程执行命令
    基于TCP协议的socket套接字编程
    Linux和git使用
    osi七层协议
    TCP协议的三次握手和四次挥手
    C/S 和 B/S架构
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13075561.html
Copyright © 2011-2022 走看看