使用备忘录法求解两个序列的最长公共子序列的长度。java代码
时间: 2023-06-08 17:05:13 浏览: 137
最长公共子序列(java实现)
好的,我知道了,这里是使用备忘录法求解两个序列的最长公共子序列的长度的 Java 代码:
```
public int longestCommonSubsequence(String text1, String text2) {
int[][] memo = new int[text1.length()][text2.length()];
for (int[] row : memo) {
Arrays.fill(row, -1);
}
return memoHelper(text1, text2, 0, 0, memo);
}
private int memoHelper(String text1, String text2, int i, int j, int[][] memo) {
if (i == text1.length() || j == text2.length()) {
return 0;
}
if (memo[i][j] != -1) {
return memo[i][j];
}
if (text1.charAt(i) == text2.charAt(j)) {
memo[i][j] = 1 + memoHelper(text1, text2, i + 1, j + 1, memo);
} else {
memo[i][j] = Math.max(memoHelper(text1, text2, i + 1, j, memo), memoHelper(text1, text2, i, j + 1, memo));
}
return memo[i][j];
}
```
这段代码使用了二维数组作为备忘录,如果当前查询的位置已经计算过了,则直接从备忘录中取值,避免重复计算,从而将计算时间缩短到了 O(m * n),其中 m 和 n 分别为两个序列的长度。
阅读全文