当前位置: 首页 > article >正文

OJ-两个字符串间的最短路径问题

示例1
输入:
ABC ABC
输出:
3

ABC
A1
B1
C1

示例2
输入:
ABCABBA CBABAC
输出:
9

ABCABBA
C
B111
A111
B111
A111
C1

 

解题思路
1. 最长路线为两段直线之和,即str1+str2长度
2. 变数在于:相同的坐标直连会减小距离
3. 要求出所有可能得路线距离,取得最小值

动态规划:
定义一个二维数组 dp,其中 dp[i][j] 表示从字符串A的前i个字符到字符串B的前j个字符的最短距离。
按照以下规则更新 dp 数组:

  • 初始化dp[0][j]和dp[i][0] ,分别表示空串到字符串B和字符串A到空串的距离。
  • 从dp[1][1] 开始,逐行逐列填充 dp 数组。
    • 如果str1[i] == str2[j],则 dp[i][j]到dp[i-1][j-1] 表示可以形成一个斜边。dp[i][j]取dp[i-1][j]、dp[i][j-1]、dp[i-1][j-1]中的最小值,分别对应水平边、垂直边和斜边。
    • 否则, dp[i][j]取dp[i-1][j]、dp[i][j-1]中的最小值,分别对应水平边、垂直边。
  • 通过逐行逐列的方式填充 dp 数组, 最终 dp[m][n]就是原点到终点的最短距离。
import java.util.Scanner;

public class 给定两个字符串间最短路径 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str1 = "0" + in.next();
        String str2 = "0" + in.next();

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

248.【华为OD机试】两个字符串间的最短路径问题(动态规划-Java&Python&C++&JS实现)_2023华为od-c卷-第三题-两个字符串间的最短路径问题】(javascript&java&pyt-CSDN博客


http://www.kler.cn/news/357334.html

相关文章:

  • 在数据库中,`SELECT`, `FROM`, `JOIN`, `ON`, 和 `WHERE`各自的作用
  • csp普及组算法集训--Dfs
  • 一级注册消防工程师《消防安全技术实务》模拟试题及详解
  • 详解mac系统通过brew安装mongodb与使用
  • SpringCloud学习:Spring Cloud Alibaba Nacos(服务注册中心、配置管理中心)
  • PyTorch 实现自然语言分类
  • [PHP]Undefined index错误只针对数组
  • 如何有效保障专线健康:运维团队的专线监控策略
  • yjs机器学习数据操作01——数据的获取、可视化
  • 基于Flink MySQL CDC技术实现交易告警
  • 三、数据聚合和函数
  • 个人主页模版(源代码开源)
  • 界面控件Telerik UI for WPF 2024 Q3亮点 - 支持禁用数据过滤等
  • 蒙特卡洛算法:从概率模拟到机器学习模型优化的全方位解析
  • 第五届机器学习与计算机应用国际学术会议(ICMLCA 2024)
  • 同三维T80001JEHVA H.265 HDMI/VGA/CVBS解码器
  • c#编写的各类应用程序、类库的引用(黑白盒)
  • 软考(网工)——网络安全
  • YOLOv8实战人脸-口罩检测与识别【数据集+YOLOv8模型+源码+PyQt5界面】
  • 卷积神经网络(Convolutional Neural Network)案例