题目描述:
给定两个字符串,寻找这两个字串之间的最长公共子序列。
解题思路:
以二维数组的方式遍历两个字符串,行和列要加一,方便计算,
当遍历的两个字符相同时,就代表他两个字符串中都有这个字符,
就让这个位置等于左上角的数字加一,dp[i][j] = dp[i-1][j-1] + 1;
当两个字符不相等时,让他等于之前记录的公共串,此位置等于,
上面和左边两个数中大的那个数,dp[i][j] = Math.max(dp[i][j-1],dp[i-1][j]);
代码:
package lanqiao;
import java.math.BigInteger;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.next();
String c = sc.next();
int n = s.length() + 1,m = c.length() + 1;
int[][] dp = new int[n][m];
for(int i = 1;i < n;i ++)
{
for(int j = 1;j < m;j ++)
{
if(s.charAt(i - 1) != c.charAt(j - 1)){
dp[i][j] = Math.max(dp[i][j - 1],dp[i - 1][j]);
}else{
dp[i][j] = dp[i - 1][j - 1] + 1;
}
}
}
System.out.println(dp[n - 1][m - 1]);
}
}