lotus

贵有恒何必三更眠五更起 最无益只怕一日曝十日寒

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1. 题目

读题

HJ52 计算字符串的编辑距离

 

 

考查点

 

2. 解法

思路

 

代码逻辑

 

具体实现

 

// 定义一个类,用来计算两个字符串之间的编辑距离
public class EditDistance {

    // 定义一个静态方法,接受两个字符串作为参数,返回它们之间的编辑距离
    public static int editDistance(String str1, String str2) {
        // 获取两个字符串的长度
        int m = str1.length();
        int n = str2.length();
        // 创建一个二维数组,用来存储动态规划的结果
        int[][] dp = new int[m + 1][n + 1];
        // 初始化边界条件
        for (int i = 0; i <= m; i++) {
            dp[i][0] = i; // 第一列表示将 str1 的前 i 个字符转换成空字符串所需的操作次数
        }
        for (int j = 0; j <= n; j++) {
            dp[0][j] = j; // 第一行表示将空字符串转换成 str2 的前 j 个字符所需的操作次数
        }
        // 遍历两个字符串,填充动态规划数组
        for (int i = 1; i <= m; i++) {
            for (int j = 1; j <= n; j++) {
                // 如果当前字符相同,则不需要进行任何操作,编辑距离等于左上角的值
                if (str1.charAt(i - 1) == str2.charAt(j - 1)) {
                    dp[i][j] = dp[i - 1][j - 1];
                } else {
                    // 如果当前字符不同,则需要进行替换、插入或删除操作,编辑距离等于左上角、左边或上边的值中的最小值加一
                    dp[i][j] = Math.min(Math.min(dp[i - 1][j - 1], dp[i][j - 1]), dp[i - 1][j]) + 1;
                }
            }
        }
        // 返回最终结果,即右下角的值
        return dp[m][n];
    }

    // 测试一下方法的效果
    public static void main(String[] args) {
        String str1 = "HJ52";
        String str2 = "HJ53";
        System.out.println("The edit distance between " + str1 + " and " + str2 + " is " + editDistance(str1, str2));
    }
}

3. 总结

posted on 2023-07-27 16:00  白露~  阅读(97)  评论(0编辑  收藏  举报