深圳团购网站设计价格wordpress需要的插件
web/
2025/10/1 3:19:20/
文章来源:
深圳团购网站设计价格,wordpress需要的插件,自己做免费的网站吗,wordpress页脚小工具栏一句话总结#xff1a;看起来复杂#xff0c;动规分析以后就比较简单。
原题链接#xff1a;583 两个字符串的删除操作 本质就是求两个字符串的最短子序列的长度。已经做过#xff0c;不再详解。
class Solution {public int minDistance(String word1, String word2) {/…一句话总结看起来复杂动规分析以后就比较简单。
原题链接583 两个字符串的删除操作 本质就是求两个字符串的最短子序列的长度。已经做过不再详解。
class Solution {public int minDistance(String word1, String word2) {// dp数组找最长相同子序列长度然后两字符串总长减去2 * 最长长度即可int m word1.length(), n word2.length();int[][] dp new int[m 1][n 1];for (int i 1; i m; i) {for (int j 1; j n; j) {if (word1.charAt(i - 1) word2.charAt(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 m n - dp[m][n] * 2;}
} 原题链接72 编辑距离 看起来比较难用动规五部曲分析一下
确定动规数组及其下标的含义 dp[i][j]表示以i - 1结尾的word1的子串到以j - 1结尾的word2的子串的最近的编辑距离确定状态转移方程分为两种情况当word1[i - 1] word2[j - 1]时显而易见的dp[i][j] dp[i - 1][j - 1]当word1[i - 1] ! word2[j - 1]时最短的编辑距离又分为三种情况首先是从删除word1[i - 1]此时dp[i][j] dp[i - 1][j] 1然后是删除word2[j - 1]此时dp[i][j] dp[i][j - 1] 1最后一种情况则是将word1[i - 1]替换为word2[j - 1]以使得两者相等那么就有dp[i][j] dp[i - 1][j - 1] 1在这三种情况中取最小值即可。即if (word1.charAt(i -1) ! word2.charAt(j - 1)) dp[i][j] Math.min(Math.min(dp[i][j - 1] 1, dp[i - 1][j] 1), dp[i - 1][j - 1] 1)dp数组的初始化对于任意dp[i][0]编辑距离一定是删除完所有字符因此dp[i][0] i同理dp[0][j] jdp数组的遍历顺序从上面的递推方程可见依赖于i - 1和j - 1因此从前往后即可举例推导略。
最终代码如下
class Solution {public int minDistance(String word1, String word2) {char[] cs1 word1.toCharArray(), cs2 word2.toCharArray();int m word1.length(), n word2.length();int[][] dp new int[m 1][n 1];for (int i 1; i m; i) {dp[i][0] i;}for (int j 1; j n; j) {dp[0][j] j;}for (int i 1; i m; i) {for (int j 1; j n; j) {if (cs1[i - 1] cs2[j - 1]) dp[i][j] dp[i - 1][j - 1];else dp[i][j] Math.min(dp[i][j - 1] 1, Math.min(dp[i - 1][j] 1, dp[i - 1][j - 1] 1));}}return dp[m][n];}
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/84809.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!