1. 程式人生 > 其它 >程式碼隨想錄第五十七天 | 動態規劃

程式碼隨想錄第五十七天 | 動態規劃

今天是第五十七天,也是動態規劃的最後一天

647. 迴文子串 

class Solution {
    public int countSubstrings(String s) {
        int n = s.length();
        int res = 0;
        
        
        boolean[][] dp = new boolean[n][n];
        for (int j = 0; j < n; j++) {
            for (int i = 0; i <= j; i++) {
                
                
if (s.charAt(i) == s.charAt(j)) { if (j - i < 3) { dp[i][j] = true; } else { dp[i][j] = dp[i + 1][j - 1]; } } else { dp[i][j]
= false; } } } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (dp[i][j]) res++; } } return res; } }

分三種情況看下標i與j的和的差,如果為0則true,為1則false,大於1則通過前後的陣列來判斷。

516.最長迴文子序列

class
Solution { public int longestPalindromeSubseq(String s) { int n = s.length(); int[][] dp = new int[n][n]; for(int i =0; i<n; i++){ dp[i][i]= 1; } for(int i = n-1; i>=0; i--){ 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]; } }
dp[i][j] 依賴於dp[i+1][j]和dp[i+1][j-1]

今天是動態規劃的最後一天,動態規劃的好多題很容易混淆,需要重複做!加油!!!