题解 | #最长公共子序列-II#
最长公共子序列-II
http://www.nowcoder.com/practice/6d29638c85bb4ffd80c020fe244baf11
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 int m = s1.length(); int n = s2.length(); // dp表示 s1前i个元素 与s2前j个元素的最长公共子序列串 String[][] dp = new String[m+1][n+1]; for (int i = 0; i <= s1.length(); i++) { dp[i][0] = ""; } for (int i = 0; i <= s2.length(); i++) { dp[0][i] = ""; } 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{ dp[i][j] = dp[i-1][j].length() > dp[i][j-1].length() ? dp[i-1][j] : dp[i][j-1]; } } } return dp[m][n].length() == 0 ? "-1" : dp[m][n]; } }