leetcode 最短编辑距离

    技术2022-07-11  97

    题目

    给定2个字符串,计算一个字符串经过最少的变换转换为另外一个字符串。 变换可以是3种: 插入一个字符 删除一个字符 更改一个字符

    例如: str = “abc” str2 = “bc” str删除前边的一个字符则变成str2,或者str2增加一个字符则变成str,所以编辑距离为1

    分析思路

    动态规划思想 字符串A,字符串B编辑距离和 字符串A去掉最后1个字符,字符串B去掉最后1个字符 字符串A,字符串B去掉最后1个字符 字符串A去掉最后1个字符,字符串B 的相似度有一定的关系,可以得到迭代公式,进一步进行计算即可

    代码

    package org.example.distance; /** * 最短编辑距离 */ public class EditDistance { //初始化数据 public static int editDistance(char[] strA,char[] strB){ int[][] dp = new int[strA.length+1][strB.length+1]; //初始化 for (int i = 0; i < strA.length+1 ; i++) { dp[i][0]=i; } //初始化 for (int j = 0; j < strB.length+1 ; j++) { dp[0][j]=j; } //计算最短编辑距离 //从矩阵的左下角开始计算最小编辑距离 for (int i = 1; i < strA.length+1 ; i++) { for (int j = 1; j < strB.length+1; j++) { //如果末尾字符一样 if(strA[i-1]==strB[j-1]){ dp[i][j] = Math.min(dp[i-1][j-1],Math.min(dp[i-1][j],dp[i][j-1])+1); }else { dp[i][j] = Math.min(dp[i-1][j-1],Math.min(dp[i-1][j],dp[i][j-1]))+1; } } } //返回编辑距离 return dp[strA.length][strB.length]; } public static void main(String[] args) { char[] strA = "abcd".toCharArray(); char[] strB = "ab".toCharArray(); System.out.println(editDistance(strA,strB)); } }
    Processed: 0.013, SQL: 9