程式碼隨想錄第五十七天 | 動態規劃
阿新 • • 發佈:2022-12-10
今天是第五十七天,也是動態規劃的最後一天
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則通過前後的陣列來判斷。
classdp[i][j] 依賴於dp[i+1][j]和dp[i+1][j-1]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]; } }
今天是動態規劃的最後一天,動態規劃的好多題很容易混淆,需要重複做!加油!!!