经典算法-最长公共子序列-动态规划
public class Main
{
static int f(String s1, String s2){
char[] c1 = s1.toCharArray();//转成char数组
char[] c2 = s2.toCharArray();
int[][] a = new int[c1.length+1][c2.length+1];//计数数组
int max = 0;
for(int i=1; i<a.length; i++){
for(int j=1; j<a[i].length; j++){
if(c1[i-1]==c2[j-1]) {
a[i][j] = a[i-1][j-1]+1; //判断是否相等
if(a[i][j] > max) max = a[i][j];//寻找最大值
}
}
}
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
System.out.print(a[i][j]+" ");
}System.out.println();
}
return max;
}
public static void main(String[] args){
int n = f("abcdkkk", "baabcdadabc");//寻找最长公共子序列
System.out.println(n);
}
}
不看别人的代码永远不知道别人有多优秀
摘自蓝桥杯填空题
本文介绍了一种使用动态规划解决最长公共子序列问题的经典算法。通过将字符串转换为字符数组并使用二维数组进行计数,算法能够找出两个字符串之间的最长公共子序列。文章包含完整的Java代码实现,并通过一个示例展示了如何使用该算法。
7070

被折叠的 条评论
为什么被折叠?



