题目描述
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
问题描述
· 给定两个字符串,寻找这两个字串之间的最长公共子序列。
输入格式
· 输入两行,分别包含一个字符串,仅含有小写字母。
输出格式
· 最长公共子序列的长度。
样例输入
abcdgh aedfhb
样例输出
3
数据规模和约定
· 字串长度1~1000。
解题思路
1.从第一排开始从左到右依次遍历A-A,A-L,A-C…
如果相等(A-A)则该位置标记等于左斜上位置标记+1;
2.如果不同(A-L),则该位置等于MAX(左和上)。
3.以此遍历直至最后。最长子序列为最后位置标记值。
(最长子序列可能不止一种排序,图中为其中一种)
算法代码
import java.util.Scanner;
/**
* @author admin
*/
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
char[] x = scanner.nextLine().toCharArray();
char[] y = scanner.nextLine().toCharArray();
int[][] dp=new int[x.length+1][y.length+1];
for (int i=1; i<x.length+1; i++) {
for (int j=1; j<y.length+1; j++) {
if(x[i-1]==y[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]);
}
}
}
System.out.println(dp[x.length][y.length]);
}
}
借鉴文章:https://blog.csdn.net/weixin_51797050/article/details/123162714