zoukankan      html  css  js  c++  java
  • 最长公共子序列(LCS动态规划)?

    // dp[i][j] 计算去最大长度,记住口诀:相等左上角加一,不等取上或左最大值
    function LCS(str1, str2){
            var rows =  str1.split("")
            rows.unshift("")
            var cols =  str2.split("")
            cols.unshift("")
            var m = rows.length
            var n = cols.length
            var dp = []
            for(var i = 0; i < m; i++){
                dp[i] = []
                for(var j = 0; j < n; j++){
                    if(i === 0 || j === 0){
                        dp[i][j] = 0
                        continue
                    }
                  
                    if(rows[i] === cols[j]){
                        dp[i][j] = dp[i-1][j-1] + 1 //对角+1
                    }else{
                        dp[i][j] = Math.max( dp[i-1][j], dp[i][j-1]) //对左边,上边取最大
                    }
                }
                console.log(dp[i].join(""))//调试
            }
            return dp[i-1][j-1]
        }
    //!!!如果它来自左上角加一,则是子序列,否则向左或上回退。
    //findValue过程,其实就是和 就是把T[i][j]的计算反过来。
    // 求最长子序列
    function findValue(input1,input2,n1,n2,T){
        var i = n1-1,j=n2-1;
        var result = [];//结果保存在数组中
        console.log(i);
        console.log(j);
        while(i>0 && j>0){
            if(input1[i] == input2[j]){
                result.unshift(input1[i]);
                i--;
                j--;
            }else{
                //向左或向上回退
                if(T[i-1][j]>T[i][j-1]){
                    //向上回退
                    i--;
                }else{
                    //向左回退
                    j--;
                }
            }

        }

        console.log(result);
    }

    Java Program!
  • 相关阅读:
    一个完整的Http请求
    struts2回显指定的错误信息
    Struts2中的OGNL通配符
    hibernate日常BUG总结
    Hibernate中的GetCurrentSession()方法
    hibernate query.list() 返回的数据类型
    xp远程桌面登陆需要身份验证问题解决
    spring和hibernate整合时无法自动建表
    Spring的scope="prototype"属性
    给程序员的九点建议
  • 原文地址:https://www.cnblogs.com/programb/p/14068861.html
Copyright © 2011-2022 走看看