描述
LCS:最长公共子序列
问题描述:求两个字符串的最长公共子序列的长度,例如输入str1 = “abcde”, str2 = “aceb”,算法应该输出3。
代码
import static java.lang.System.out;
public class Helloworld {
public static int LCS(String s1, String s2){
char[] s1_arr = s1.toCharArray();
char[] s2_arr = s2.toCharArray();
int m = s1.length(), n = s2.length();
int[][] dp = new int[m + 1][n + 1];
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
if (s1_arr[i - 1] == s2_arr[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 s1 = "abcde";
String s2 = "aceb";
int res = LCS(s1, s2);
out.println(res);
}
}