zoukankan      html  css  js  c++  java
  • 字符串最小变换次数

    题目

    题目连接:牛客网:最小变换次数

    给定两个字符串,已知可以使用三种方式进行变换

    1. 插入一个字符
    2. 删除一个字符
    3. 更改一个字符

    请设计一个算法,找到两个字符串之间的经历几次最小变换,可以字符串1转换成字符串2

    输入描述

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

    输出描述

    最小变换次数

    样例输入

    hello
    helle

    样例输出

    1

    AC 代码

    import java.util.Scanner;
    
    /**
     * 典型的动态规划题目
     *
     * 可以用dp[i][j]来表示str1在i位置之前和str2在j位置之前字符的最小变换次数,
     * 那么dp[i][j]的取值与当前位置字符的判断有关。
     *
     * 递推公式:
     *
     *      str1[i] == str2[j]
     *          =>  dp[i][j] = dp[i-1][j-1]
     *
     *      str1[i] != str2[j]
     *          =>  dp[i][j] = min(dp[i-1][j-1], dp[i][j-1], dp[i-1][j]) + 1
     *
     *      为了初始化方便,可以在str1和str2的首部添加一个哨兵字符
     *      例如:
     *
     *         #  e  k  k  o
     *      #  0  1  2  3  4
     *      h  1  1  2  3  4
     *      e  2  1  2  3  4
     *      k  3  2  1  2  3
     *      k  4  3  2  1  2
     *      o  5  4  3  2  1
     *
     */
    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]);
        }
    }
    
  • 相关阅读:
    git 拉取开发代码
    android webview
    H5 元素定位
    Python中模块
    服务器1
    活动
    宝塔面板-阿里部署
    最新版Xshell、Xftp注册机NetSarang
    最新版Navicat Premium激活,附激活工具
    9月29更新美版T-mobile版本iPhone7代和7P有锁机卡贴解锁方法
  • 原文地址:https://www.cnblogs.com/debugxw/p/11330704.html
Copyright © 2011-2022 走看看