zoukankan      html  css  js  c++  java
  • 583. Delete Operation for Two Strings

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

    /*
            两个字符串,每次只能删除一个字符,求多少步可以让两个字符串相同,其实就是两个字符串的最大公共子序列长度。
            重要,要记住,用动态规划,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];
  • 相关阅读:
    第一篇随笔
    我的第一篇博客
    第一次博客
    芜湖
    芜湖~
    起飞
    第一天
    第一篇随笔
    第一篇随笔
    随笔
  • 原文地址:https://www.cnblogs.com/stAr-1/p/8186017.html
Copyright © 2011-2022 走看看