美文网首页
动态规划实现最小编辑距离算法

动态规划实现最小编辑距离算法

作者: 指尖架构141319 | 来源:发表于2019-12-27 16:15 被阅读0次

1.计算两个字符串最小变更几次变成相同

规则:可以插入、删除、替换单个字母

2. 撸码

/**
 * @description: 最小编辑距离的算法动态规划实现
 * @author: Liangyb (yunbo.liang@ucarinc.com)
 * @create: 2019/12/27 10:30
 */
public class Min_Edit_Distance {

    private static int cost = 0;
    public static int minEdit_distance(String source, String target) {
        //校验合法性
        if(source == null || target == null || "".equals(source) || "".equals(target)){
            return -1;
        }
        if(source.equals(target)){
            return 0;
        }
        //字符串长度
        final int t = target.length();
        final int s = source.length();
        //申请二伟数组存放矩阵
        int[][] distance_matrix = new int[s+1][t+1];
        distance_matrix[0][0] = 0;
        //边界条件初始化
        for(int si=0; si <= s; si++){
            distance_matrix[si][0] = si;
        }
        for(int ti=0; ti <= t; ti++){
            distance_matrix[0][ti] = ti;
        }
        //计算矩阵值
        for(int i=1;i <= s;i++){
            char si = source.charAt(i - 1);
            for(int j=1;j <= t;j++){
                char tj = target.charAt(j - 1);
                if(si == tj){
                    cost = 0;
                }else{
                    cost = 1;
                }
                distance_matrix[i][j] = Math.min(distance_matrix[i-1][j-1]+cost,
                        Math.min(distance_matrix[i-1][j]+1, distance_matrix[i][j-1]+1));
            }
        }
        return distance_matrix[s][t];
    }


    public static void main(String[] args){

        String source = "china";
        String target = "chna";
        System.out.println("最小编辑距离是:"+minEdit_distance(source,target));

    }
}

相关文章

网友评论

      本文标题:动态规划实现最小编辑距离算法

      本文链接:https://www.haomeiwen.com/subject/tzudoctx.html