一、题目内容

image.png

二、题解

解法1:

思路

二维动态规划

代码

  1. public class Solution {
  2. public String LCS (String s1, String s2) {
  3. // write code here
  4. int len1 = s1.length(),len2 = s2.length();
  5. if(len1 == 0 || len2 == 0){
  6. return "-1";
  7. }
  8. int[][] dp = new int[len1+1][len2+1];
  9. for(int i = 0;i<=len1;i++){
  10. for(int j = 0;j<=len2;j++){
  11. if(i == 0 || j == 0){
  12. dp[i][j] = 0;
  13. }else if(s1.charAt(i-1) == s2.charAt(j-1)){
  14. dp[i][j] = dp[i-1][j-1] + 1;
  15. }else{
  16. dp[i][j] = Math.max(dp[i][j-1],dp[i-1][j]);
  17. }
  18. }
  19. }
  20. if(dp[len1-1][len2-1] == 0){
  21. return "-1";
  22. }
  23. StringBuilder result = new StringBuilder();
  24. int i = len1, j = len2;
  25. while (i > 0 && j > 0) {
  26. if (s1.charAt(i-1) == s2.charAt(j-1)) {
  27. result.append(s1.charAt(i-1));
  28. i--;
  29. j--;
  30. } else {
  31. if (dp[i][j-1] > dp[i-1][j]) {
  32. j--;
  33. } else {
  34. i--;
  35. }
  36. }
  37. }
  38. return result.reverse().toString();
  39. }
  40. }