这个题的很多解法是将dp数组变为int类型来计算的,所以是按照最长公共子序列(一)的思路来实现的,然后在通过长度从尾巴遍历得到结果。其实这样会比较麻烦,我们可以在设置dp数组的时候就把其设置为String类型的。求出的dp就是我们要的结果,也就不需要去遍历求解了。
import java.util.*;
public class Solution {
/**
* longest common subsequence
* @param s1 string字符串 the string
* @param s2 string字符串 the string
* @return string字符串
*/
public String LCS (String s1, String s2) {
// write code here
char[] c1=s1.toCharArray();
char[] c2=s2.toCharArray();
int len1=s1.length();
int len2=s2.length();
String[][] dp=new String[len1+1][len2+1];
for(int i=0;i<=len1;i++){
dp[i][0]="";
}
for(int i=0;i<=len2;i++){
dp[0][i]="";
}
for(int i=1;i<=len1;i++){
for(int j=1;j<=len2;j++){
if(c1[i-1]==c2[j-1]){
dp[i][j] = dp[i - 1][j - 1] + c2[j-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];
}
}
}
return dp[len1][len2].length()==0?"-1":dp[len1][len2];
}
}

京公网安备 11010502036488号