zoukankan      html  css  js  c++  java
  • 最长子回文序列

    leetcode上的题目

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/longest-palindromic-subsequence

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

    示例 1:
    输入:"bbbab"

    输出:4

    一个可能的最长回文子序列为 "bbbb"。

    示例 2:
    输入:"cbbd"

    输出: 2

    一个可能的最长回文子序列为 "bb"。

    降维后的动态规划,执行用时 :20 ms, 在所有 Java 提交中击败了88.84%的用户 内存消耗 :40.9 MB, 在所有 Java 提交中击败了96.52%的用户

    class Solution {
        public int longestPalindromeSubseq(String s) {
            if (null == s || s.length() == 0) {
                return 0;
            }
            int len = s.length();
            // int [][] dp = new int[len][len];
            // for(int i = len - 1; i>=0; i--){
            //     dp[i][i] = 1;
            //     for(int j = i+1; j < len; j++){
            //         if(s.charAt(i) == s.charAt(j))
            //             dp[i][j] = dp[i+1][j-1] + 2;
            //         else
            //             dp[i][j] = dp[i+1][j] > dp[i][j-1] ? dp[i+1][j] : dp[i][j-1];
            //             // dp[i][j] = Math.max(dp[i+1][j], dp[i][j-1]);
            //     }
            // }
            // return dp[0][len-1]; 
    
            int dp[] = new int[len];
            int temp = 0;
            int pre = 0;
            for (int i=len-1; i>=0; --i) {
                dp[i] = 1;
                pre = 0;
                for (int j=i+1; j<len; ++j) {
                    temp = dp[j];
                    dp[j] = s.charAt(i) == s.charAt(j) ?  dp[j] = pre + 2 : Math.max(dp[j], dp[j-1]);
                    pre = temp;
                }
                
            }
            return dp[len-1];
        }
    }
  • 相关阅读:
    mysql优化四(SQL优化)
    mysql优化三(索引)
    mysql优化二(优化数据库的设计)
    mysql优化一(优化方式)
    ES6——Thunk函数
    JavaScript例子
    fetch使用
    ES6—Generator的next()方法传参
    ES6——Generator函数抛出异常
    JavaScript对象添加属性和方法
  • 原文地址:https://www.cnblogs.com/steve-jiang/p/12327270.html
Copyright © 2011-2022 走看看