动态规划总结(几个常见的序列化问题)

Posted smalljunjun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态规划总结(几个常见的序列化问题)相关的知识,希望对你有一定的参考价值。

1.最长递增子序列问题

https://leetcode.com/problems/longest-increasing-subsequence/

public int lengthOfLIS(int[] nums) {
        if(nums.length==0||nums==null) return 0;
        int[] dp=new int[nums.length];
        int max=0;
        for(int i=0;i<nums.length;i++)
        {
            dp[i]=1;
            for(int j=0;j<i;j++)
            {
                if(nums[i]>nums[j]){
                    dp[i]=Math.max(dp[j]+1,dp[i]);
                }
            }
            if(dp[i]>max) max=dp[i];
        }
        return max;
    }

2.最长回文串问题

https://leetcode.com/problems/longest-palindromic-substring/

public String longestPalindrome(String s) {
        if(s==null||s.length()==0) return s;
        int[][] dp=new int[s.length()][s.length()];
        int left=0,right=0,maxLen=1;
        for(int i=0;i<s.length();i++){
            dp[i][i]=1;
            for(int j=i-1;j>=0;j--){
                if(s.charAt(i)==s.charAt(j)&&(i-j==1||dp[j+1][i-1]!=0))
                    dp[j][i]=1;
                else
                    dp[j][i]=0;
                if(dp[j][i]!=0&&i-j+1>=maxLen)
                {
                    left=j;
                    right=i;
                    maxLen=i-j+1;
                }  
            }
        }
        return s.substring(left,right+1);
    }

3.最长的有效括号的长度

Input: ")()())"
Output: 4

https://leetcode.com/problems/longest-valid-parentheses/

public int longestValidParentheses(String s) {
        if(s==null||s.length()==0) 
            return 0;
        Stack<Integer> stack=new Stack<>();
        int start=0,maxLen=0;
        for(int i=0;i<s.length();i++)
        {
            if(s.charAt(i)==() stack.push(i);//保存下标
            else if(s.charAt(i)==))
            {
                if(stack.isEmpty()) 
                    start=i+1;//直接跳过这一位,始终保持能够匹配的最左边的下标
                else 
                {
                   stack.pop();//匹配弹出
                   maxLen=stack.isEmpty()?Math.max(maxLen, i-start+1):Math.max(maxLen, i-stack.peek());
                }
            }
        }
        return maxLen;      
    }

 

以上是关于动态规划总结(几个常见的序列化问题)的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode 动态规划刷题总结

动态规划问题初步:序列类和双序列类

算法---动态规划(编辑距离不同子序列动态规划总结)

算法笔记 万物皆可DP——动态规划常见类型 HERODING的算法之路

经典动态规划——从LeetCode题海中总结常见套路

动态规划类型总结