java用动态规划求解最长公共子序列问题代码
时间: 2023-11-24 12:12:25 浏览: 77
动态规划方法求解最长公共子序列代码
4星 · 用户满意度95%
以下是Java中使用动态规划求解最长公共子序列问题的代码示例:
```java
public class LongestCommonSubsequence {
public static int lcs(String str1, String str2) {
int m = str1.length();
int n = str2.length();
int[][] dp = new int[m + 1][n + 1];
for (int i = 0; i <= m; i++) {
for (int j = 0; j <= n; j++) {
if (i == 0 || j == 0) {
dp[i][j] = 0;
} else if (str1.charAt(i - 1) == str2.charAt(j - 1)) {
dp[i][j] = dp[i - 1][j - 1] + 1;
} else {
dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
}
}
}
return dp[m][n];
}
public static void main(String[] args) {
String str1 = "AGGTAB";
String str2 = "GXTXAYB";
System.out.println("Length of LCS is " + lcs(str1, str2));
}
}
```
在上面的示例代码中,`lcs`方法使用动态规划算法求解最长公共子序列的长度,其中`dp`数组存储了子问题的解。在初始化`dp`数组时,对于第一行和第一列,它们的值都为0。接下来,我们遍历整个`dp`数组并填充它。如果当前字符相同,则当前位置的解等于左上角位置的解加上1。否则,当前位置的解等于上方位置和左侧位置中的最大值。最后,`dp[m][n]`即为最长公共子序列的长度。
阅读全文