【DP】编辑距离

本文介绍了一种计算两个字符串之间编辑距离的动态规划算法。编辑距离是指通过插入、删除或替换字符将一个字符串转换为另一个字符串所需的最少操作次数。文章详细解释了算法原理,并提供了完整的Java实现代码。

题目描述


Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.)

You have the following 3 operations permitted on a word:

a) Insert a character
b) Delete a character
c) Replace a character


哇终于在DP上找到点感觉!
dist[i][j]表示word1 1~i通过dist[i][j]种次操作变到word2 1~j。
当word1.charat(i) == word2.charat(j)时,dist[i][j] = dist[i - 1][j - 1];
否则,有三种选择:
1)如果dist[i - 1][j]最小,则dist[i][j] = dist[i - 1][j] + 1(word1末尾的一次删除操作);
2)如果dist[i - 1][j - 1]最小,则dist[i][j] = dist[i - 1][j - 1] + 1(word1末尾的字符替换成word2末尾的字符);
3)如果dist[i][j - 1]最小,则dist[i][j] = dist[i][j - 1] + 1(说明这次的word2的末尾字符插入到word1末尾即可);

public class Solution {
    public int minDistance(String word1, String word2) {
        
        if(word1.equals("") || word2.equals(""))
            return word1.equals("") ? word2.length():word1.length();
        
        int len1 = word1.length() + 1;
        int len2 = word2.length() + 1;
        
        int [][] dist = new int [len1][len2];
        dist[0][0] = 0;
        
        for(int i = 1; i < len1; ++i)
            dist[i][0] = i;
        
        for(int i = 1; i < len2; ++i)
            dist[0][i] = i;
        
        for(int i = 1; i < len1; ++i){
            for(int k = 1; k < len2; ++k){
                if(word1.charAt(i - 1) == word2.charAt(k - 1)){
                    dist[i][k] = dist[i - 1][k - 1];
                }else{
                    int temp = dist[i - 1][k] > dist[i - 1][k - 1]? dist[i - 1][k - 1] : dist[i - 1][k];
                    int min = temp > dist[i][k - 1]? dist[i][k - 1] : temp;
                    dist[i][k] = min + 1;
                }
            }
        }
        return dist[len1 - 1][len2 - 1];
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值