美文网首页
子序列——最长公共子序列LCS(四)

子序列——最长公共子序列LCS(四)

作者: 旺叔叔 | 来源:发表于2018-11-09 17:22 被阅读0次

LeetCode_583_DeleteOperationForTwoStrings

题目分析:

一开始发现LeetCode没有LCS原题我是震精的,直接就是变种题,一点都不美丽。
求删除最少,那么删除后留下的最长,也就删除最少,也就是求LCS了。
子序列问题一下扩展到了二维。
其实就像我们的走楼梯换到了二维一样。
dp[i][j] 代表s1[i - 1]和s2[j - 1]能取到的LCS。
定义有多种,-1与否是指为了返回或者迭代方便,相信走楼梯过后你已经习惯了。
if(s1[i - 1] == s2[j - 1])
  dp[i][j] = dp[i - 1][j - 1] + 1;
else
  dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
之前说了,dp找方程是靠状态划分,其实两个字符串的dp,无非就是三种情况。
1.s1加一个字符
2.s2加一个字符
3.s1,s2都加一个字符
翻译成二维走楼梯对应的就是
1.和左方有关
2.和上方有关
3.和左上方有关

解法:

public static int minDistance(String word1, String word2) {
    int lcs = longestCS_dp_betterlook(word1, word2);
    return word1.length() + word2.length() - 2 * lcs;
}

public static int longestCS_dp_betterlook(String x, String y){
    char[] xList = x.toCharArray();
    char[] yList = y.toCharArray();
    int m = xList.length;
    int n = yList.length;
    int dp[][] = new int[m + 1][n + 1];

    /**
     * 开始根据方程递推
     */
    for (int i = 1; i <= m; i++) {
        for (int j = 1; j <= n; j++) {
            if(xList[i - 1] == yList[j - 1])
                dp[i][j] = dp[i - 1][j - 1] + 1;
            else
                dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
        }
    }

    return dp[m][n];
}

相关文章

  • lintcode 最长公共子序列

    给出两个字符串,找到最长公共子序列(LCS),返回LCS的长度。说明最长公共子序列的定义: 最长公共子序列问题是在...

  • 子序列

    最长公共子序列(LCS)(lintcode 77) 描述:给出两个字符串,找到最长公共子序列(LCS),返回LCS...

  • LCS问题

    LCS问题包括最长公共子序列和最长公共子串,其中,最长公共子串要求必须连续。 对于二者的求解方式 最长公共子序列:...

  • 最长递增子序列: 动态规划和LCS(最长公共子序列)

    最长递增子序列: 动态规划和LCS(最长公共子序列)子序列和子串的区别:子序列不连续,字串连续。这个题两种解法 动...

  • LCS详解

    LCS是什么 LCS是Longest Common Subsequence的缩写,即最长公共子序列。一个序列,如果...

  • LCS解析,打印最大长度和路径

    LCS是什么 LCS是Longest Common Subsequence的缩写,即最长公共子序列。它与子串的区别...

  • 公共子序列问题

    最长公共子序列 最长上升子序列 最长公共上升子序列

  • 子序列——最长公共子序列LCS(四)

    LeetCode_583_DeleteOperationForTwoStrings 题目分析: 解法:

  • 最长公共子序列问题

    最长公共子序列,英文缩写为LCS(Longest Common Subsequence)。其定义是,一个序列 S ...

  • (6)动态规划(上) LCS

    LCS 问题描述: 在两个给定的序列中, 找出最长的公共子序列(Largest Common Sequence),...

网友评论

      本文标题:子序列——最长公共子序列LCS(四)

      本文链接:https://www.haomeiwen.com/subject/vkboxqtx.html