一、题目内容
二、题解
解法1:
思路
二维动态规划
代码
public class Solution { public String LCS (String s1, String s2) { // write code here int len1 = s1.length(),len2 = s2.length(); if(len1 == 0 || len2 == 0){ return "-1"; } int[][] dp = new int[len1+1][len2+1]; for(int i = 0;i<=len1;i++){ for(int j = 0;j<=len2;j++){ if(i == 0 || j == 0){ dp[i][j] = 0; }else if(s1.charAt(i-1) == s2.charAt(j-1)){ dp[i][j] = dp[i-1][j-1] + 1; }else{ dp[i][j] = Math.max(dp[i][j-1],dp[i-1][j]); } } } if(dp[len1-1][len2-1] == 0){ return "-1"; } StringBuilder result = new StringBuilder(); int i = len1, j = len2; while (i > 0 && j > 0) { if (s1.charAt(i-1) == s2.charAt(j-1)) { result.append(s1.charAt(i-1)); i--; j--; } else { if (dp[i][j-1] > dp[i-1][j]) { j--; } else { i--; } } } return result.reverse().toString(); }}