动态规划 -- 最长公共子串

 public String LCS (String str1, String str2) {
        int max = 0;
        //存储中间值
        int[][] p = new int[str1.length()][str2.length()];
        StringBuilder temp = new StringBuilder();
        int pos = 0;
        for (int i = 0 ; i < str1.length(); i++) {
            for (int j = 0 ; j < str2.length(); j++) {
                   if(str1.charAt(i) == str2.charAt(j)){
                       if(i == 0 || j==0){
                           p[i][j] = 1;
                       }else{
                           p[i][j] = p[i-1][j-1] + 1;
                       }
                   }
                   if(max <= p[i][j]){
                        max = p[i][j];
                        pos = i;
                   }
            }
        }
        return str1.substring(pos-max+1,pos+1);
    }

  

总结:

动态规划的关键在于 用中间容器存放每次迭代的中间结果

循环比递归调用的执行效率更高

posted @ 2022-10-29 18:53  yanher  阅读(23)  评论(0)    收藏  举报