当前位置:   article > 正文

最长公共子序列之求出所有子序列java源代码(回溯+动态规划)_找出动态规划数组的所有相同长度的序列 java

找出动态规划数组的所有相同长度的序列 java
  1. package suanfa;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. public class LongestCommonSubsequence {
  5. static int[][] dp;
  6. static List<String> x = new ArrayList<String>();
  7. public static void main(String[] args) {
  8. int k=longestCommonSubsequence("ABCBDAB", "BDCABA");
  9. traceBack(7, 6, "", "ABCBDAB", "BDCABA", dp);
  10. System.out.println(k);
  11. for(String s : x) {
  12. System.out.println(s);
  13. }
  14. }
  15. public static int longestCommonSubsequence(String text1, String text2) {
  16. dp=new int[text1.length()+1][text2.length()+1];
  17. for(int i=1;i<dp.length;i++){
  18. for(int j=1;j<dp[0].length;j++){
  19. if(text1.charAt(i-1)==text2.charAt(j-1)){
  20. dp[i][j]=dp[i-1][j-1]+1;
  21. }else{
  22. dp[i][j]=Math.max(dp[i-1][j],dp[i][j-1]);
  23. }
  24. }
  25. }
  26. return dp[text1.length()][text2.length()];
  27. }
  28. private static void traceBack(int i, int j, String lcs_str,String t1,String t2,int[][] dp) {
  29. while (i>0 && j>0) {
  30. if (t1.charAt(i-1) == t2.charAt(j-1)) {
  31. lcs_str += t1.charAt(i-1);
  32. --i;
  33. --j;
  34. }
  35. else {
  36. if (dp[i-1][j]> dp[i][j-1])
  37. --i;
  38. else if (dp[i-1][j] < dp[i][j-1])
  39. --j;
  40. else { // 相等的情况
  41. traceBack(i-1, j, lcs_str,t1,t2,dp);
  42. traceBack(i, j-1, lcs_str,t1,t2,dp);
  43. return;
  44. }
  45. }
  46. }
  47. x.add(lcs_str);
  48. }
  49. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/201910
推荐阅读
相关标签
  

闽ICP备14008679号