字符串最小变换次数

题目描述

给定两个字符串,已知可以使用三种方式进行变换
1. 插入一个字符
2. 删除一个字符
3. 更改一个字符
请设计一个算法,找到两个字符串之间的经历几次最小变换,可以字符串1转换成字符串2

输入描述:

输入两个字符串,字符串的长度<=1000

输出描述:

最小变换次数
示例1

输入

hello
helle

输出

1

import java.util.Scanner;
public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String str1 = "#" + scanner.next();
        String str2 = "#" + scanner.next();
        int[][] dp = new int[str1.length()][str2.length()];

        // 初始化
        for (int i = 1; i < str1.length(); i++)
            dp[i][0] = i;
        for (int i = 1; i < str2.length(); i++)
            dp[0][i] = i;

        for (int i = 1; i < str1.length(); i++) {
            for (int j = 1; j < str2.length(); j++) {
                if (str1.charAt(i) == str2.charAt(j))
                    dp[i][j] = dp[i - 1][j - 1];
                else {
                    dp[i][j] = Math.min(dp[i - 1][j - 1],
                        Math.min(dp[i][j - 1], dp[i - 1][j])) + 1;
                }
            }
        }
        System.out.println(dp[str1.length() - 1][str2.length() - 1]);
    }
}

 

posted @ 2019-09-03 01:41  何浩源  阅读(2100)  评论(0编辑  收藏  举报
//一下两个链接最好自己保存下来,再上传到自己的博客园的“文件”选项中