编辑距离 动态规划又一题型

这种题目一般是给两个字符串,找一些特性或进行一些操作。
根据题目意思设置二维数组,行列长度为两个字数组的长度加1。之所以加一是为了留空间对空字符串进行讨论。
递推式就是两个数组中如果元素相等怎么样,不相等又怎么样。

最长公共子序列:

点击查看代码
if (text1[i - 1] == text2[j - 1]) {
    dp[i][j] = dp[i - 1][j - 1] + 1;
} else {
    dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
}
相等的话就是数目加一,如果不相等就不看当前数组的字符比较后面,因为有两个数组就要取其中较大的。

不同子序列:

这题base就是不考虑长子串的当前内容,往后看。dp[i-1][j].
如果长短数组当前元素相等就要还有加上dp[i-1][j-1]的情况的数量。

编辑距离:

有三种操作增删改,但其实增和删效果是一样的。
删除操作:

点击查看代码
if (word1[i - 1] == word2[j - 1]) {
                    dp[i][j] = dp[i - 1][j - 1];
                } else {
                    dp[i][j] = min(dp[i - 1][j] + 1, dp[i][j - 1] + 1);
                }
如果相等两数组就比较下一个,不相等是只需删除一个数组中的元素,同时操作数就要加1,因为有两个数组操作数取其中较小那个。 替换操作: dp[i - 1][j - 1]+1; 因为替换后就相等了,两数组就可以比较下一个,但操作数要加1。
posted @ 2024-01-23 12:55  yun-che  阅读(19)  评论(0)    收藏  举报