码迷,mamicode.com
首页 > 其他好文 > 详细

583. Delete Operation for Two Strings

时间:2018-01-04 00:28:05      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:需要   new   style   规划   多少   第一个   第一个字符   math   子串   

这个题中有个方法是求两个字符串的最大公共子串的长度,动态规划,一定记住:根据当前位置两个字符是不是相同,做不同的处理。

/*
        两个字符串,每次只能删除一个字符,求多少步可以让两个字符串相同,其实就是两个字符串的最大公共子序列长度。
        重要,要记住,用动态规划,dp[i][j]代表第一个字符前i个字符和第二个字符前j个字符的最大公共子序列长度是多少
        dp[i][j] = (word1[i]==word2[j])?dp[i-1][j-1]+1:Math.max(dp[i][j-1],dp[i-1][j])
         */
        int l1 =word1.length();
        int l2 = word2.length();
        int[][] dp = new int[l1+1][l2+1];
        for (int i = 1; i < l1+1; i++) {
            for (int j = 1; j < l2+1; j++) {
                //注意这里由于第一个字符需要前边的,所以dp数组多了一个空,所以下标不对应了,动态规划数组一定要考虑
                //数组下标和数据下标是不是对应。
                dp[i][j] = (word1.charAt(i-1)==word2.charAt(j-1))?dp[i-1][j-1]+1:Math.max(dp[i][j-1],dp[i-1][j]);
            }
        }
        return l1+l2-2*dp[l1][l2];

 

583. Delete Operation for Two Strings

标签:需要   new   style   规划   多少   第一个   第一个字符   math   子串   

原文地址:https://www.cnblogs.com/stAr-1/p/8186017.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!