区间动态规划(Interval Dynamic Programming,简称区间DP)是一种动态规划算法,用于解决涉及区间的问题。以下是一个区间DP的Java代码示例,用于解决最长回文子序列问题:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| public class IntervalDP {
public static int longestPalindromicSubsequence(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 len = 2; len <= n; len++) { for (int i = 0; i <= n - len; i++) { int j = i + len - 1;
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]; }
public static void main(String[] args) { String s = "bbbab"; int longestPalindromeLen = longestPalindromicSubsequence(s); System.out.println("Longest Palindromic Subsequence Length: " + longestPalindromeLen); } }
|
在这个示例中,longestPalindromicSubsequence
方法使用区间动态规划解决了最长回文子序列问题。通过构建一个二维数组 dp[i][j]
来保存字符串区间 s[i..j]
的最长回文子序列长度。通过填表过程,我们可以找到最长回文子序列的长度。
这个示例是一个区间动态规划的实现,实际应用中可能需要根据不同的问题进行适当的修改。