动态规划与备忘录的LCS实现
动态规划从下到上积累能量,中间值全部记录以方便后期计算时调用,但有些时候很多记录的值用不到,这个时候备忘录方法则更好,可以减少记录的值,其特点是自上到下,记录少部分值。以LCS最长公共子串问题威力,分别给出两种实现。
- 动态规划法:
package longestCommonSubstring;
public class LCS_1 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
String s1 = "adfdsgdsgadsg";
String s2= "sddsgdsgafsdf";
LCS(s1, s2);
}
public static void LCS(String s1, String s2) {
char[] a = s1.toCharArray();
char[] b = s2.toCharArray();
int a_length = a.length;
int b_length = b.length;
int[][] lcs = new int[a_length + 1][b_length + 1];
for(int i = 0; i <= a_length; i++) {
lcs[i][0] = 0;
}
for(int j = 0; j <= b_length; j++) {
lcs[0][j] = 0;
}
for(int i = 1; i <= a_length; i++) {
for(int j = 1;j <= b_length; j++) {
if(a[i-1] == b[j-1]) {
lcs[i][j] = lcs[