东营网站建设公司,石家庄做外贸网站,做引流去那些网站好,关于网页设计的书籍开门见山
看见这道题#xff0c;我的第一反应不是去找出符合这道题的动态规划递推公式#xff0c;我反而认为可以借用一下1143. 最长公共子序列的题解
class Solution {public int longestCommonSubsequence(String text1, String text2) {int[][] dp new int[text1.lengt…开门见山
看见这道题我的第一反应不是去找出符合这道题的动态规划递推公式我反而认为可以借用一下1143. 最长公共子序列的题解
class Solution {public int longestCommonSubsequence(String text1, String text2) {int[][] dp new int[text1.length() 1][text2.length() 1];for (int i 1 ; i text1.length() ; i) {char char1 text1.charAt(i - 1);for(int j 1; j text2.length(); j){char char2 text2.charAt(j - 1);if(char1 char2){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[text1.length()][text2.length()];}
}将上面最后一行代码改成如下 int len dp[word1.length()][word2.length()];return word1.length() word2.length() - 2 * len;求出最长公共序列之后就可以用俩字符串长度相加再减去2倍的len 用了6ms 原题解用了13ms 顺便附上原题解代码
class Solution {public int minDistance(String word1, String word2) {int[][] dp new int[word1.length() 1][word2.length() 1];for (int i 0; i word1.length() 1; i) dp[i][0] i;for (int j 0; j word2.length() 1; j) dp[0][j] j;for (int i 1; i word1.length() 1; i) {for (int j 1; j word2.length() 1; j) {if (word1.charAt(i - 1) word2.charAt(j - 1)) {dp[i][j] dp[i - 1][j - 1];}else{dp[i][j] Math.min(dp[i - 1][j - 1] 2,Math.min(dp[i - 1][j] 1, dp[i][j - 1] 1));}}}return dp[word1.length()][word2.length()];}
}太难理解了2333投机取巧算了