import java.util.*; public class Solution { //dp[i][j],表示字符串1以i位置元素结尾和字符串2以j位置结尾的最长公共子序列 public String LCS (String s1, String s2) { //1建表 int m = s1.length(); int n = s2.length(); String [][] dp = new String[m+1][n+1]; // 2.初始化null为“ ” for(int i=0;i<=m;i++){ for(int j=0;j<=n;j++){ dp[i][j] = ""; } } //3.填表 for(int i=1;i<=m;i++){ for(int j=1;j<=n;j++){ if(s1.charAt(i-1)==s2.charAt(j-1)){ dp[i][j] = dp[i-1][j-1]+s1.charAt(i-1); }else{ if( dp[i-1][j].length()>dp[i][j-1].length()){ dp[i][j] = dp[i-1][j]; }else{ dp[i][j] = dp[i][j-1]; } } } } if(dp[m][n].length()==0){ return "-1"; } return dp[m][n]; } }