日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

leetcode 516. Longest Palindromic Subsequence | 516. 最长回文子序列(递归 -> 傻缓存 ->DP)

發布時間:2024/2/28 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 leetcode 516. Longest Palindromic Subsequence | 516. 最长回文子序列(递归 -> 傻缓存 ->DP) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目

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

題解

1、遞歸(超時)

遞歸 -> 傻緩存 ->DP

class Solution {public int longestPalindromeSubseq(String s) {if (s.length() == 0) return 0;return process(s, 0, s.length() - 1);}public int process(String s, int L, int R) {if (L < 0 || R == s.length() || L > R) return 0;if (L == R) {return 1;}int p1 = process(s, L + 1, R - 1);int p2 = process(s, L, R - 1);int p3 = process(s, L + 1, R);int p4 = s.charAt(L) == s.charAt(R) ? process(s, L + 1, R - 1) + 2 : 0;int res = Math.max(Math.max(p1, p2), Math.max(p3, p4));return res;} }

2、傻緩存(AC)

class Solution {public int longestPalindromeSubseq(String s) {if (s.length() == 0) return 0;int[][] dp = new int[s.length()][s.length()];return process(s, 0, s.length() - 1, dp);}public int process(String s, int L, int R, int[][] dp) {if (L < 0 || R == s.length() || L > R) return 0;if (dp[L][R] != 0) return dp[L][R];if (L == R) {dp[L][R] = 1;return 1;}int p1 = process(s, L + 1, R - 1, dp);int p2 = process(s, L, R - 1, dp);int p3 = process(s, L + 1, R, dp);int p4 = s.charAt(L) == s.charAt(R) ? process(s, L + 1, R - 1, dp) + 2 : 0;int res = Math.max(Math.max(p1, p2), Math.max(p3, p4));dp[L][R] = res;return res;} }

3、dp(AC)

class Solution {public int longestPalindromeSubseq(String s) {if (s.length() == 0) return 0;int N = s.length();int[][] dp = new int[N][N];// base casefor (int i = 0; i < N; i++) {dp[i][i] = 1;}// 根據遞歸填寫依賴for (int i = 0; i < N; i++) {for (int j = 0; j < N - i - 1; j++) {int L = j;int R = i + j + 1;int p1 = dp[L + 1][R - 1];int p2 = dp[L][R - 1];int p3 = dp[L + 1][R];int p4 = s.charAt(L) == s.charAt(R) ? dp[L + 1][R - 1] + 2 : 0;dp[L][R] = Math.max(Math.max(p1, p2), Math.max(p3, p4));}}return dp[0][N - 1];} }

總結

以上是生活随笔為你收集整理的leetcode 516. Longest Palindromic Subsequence | 516. 最长回文子序列(递归 -> 傻缓存 ->DP)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。