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

OJ-0830**

题目

在这里插入图片描述
示例1

输入:
ABC ABC
输出:
3

示例2

输入:
ABCABBA CBABAC
输出:
9

解题思路

动态规划
首先,我们可以定义一个二维数组 dp,其中 dp[i][j] 表示从字符串A的前i个字符到字符串B的前j个字符的最短距离。然后,我们可以按照以下规则更新 dp 数组:
1.如果str1[i] == str2[j],则dp[i][j] = dp[i-1][j-1],表示可以形成一个斜边。
2.否则, dp[i][j]取dp[i-1][j]、dp[i][j-1]、dp[i-1][j-1]中的最小值,分别对应水平边、垂直边和斜边。
接下来,我们可以通过逐行逐列的方式填充 dp 数组,最终 dp[m][n]就是原点到终点的最短距离。

具体思路可以总结为:
1.初始化dp[0][j]和dp[i][0] ,分别表示空串到字符串B和字符串A到空串的距离。
2.从dp[1][1] 开始,逐行逐列填充 dp 数组。
3.根据上述规则更新 dp 数组。
4. 最终输出 dp[m][n],即原点到终点的最短距离。

题解

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);String strA = in.next();String strB = in.next();char[] charA = ("0" + strA).toCharArray();char[] charB = ("0" + strB).toCharArray();int m = charA.length;int n = charB.length;int[][] dp = new int[n][m];for (int i = 0; i < m; i++) {dp[0][i] = i;}for (int i = 0; i < n; i++) {dp[i][0] = i;}for (int i = 1; i < n; i++) {for (int j = 1; j < m; j++) {if (charA[j] == charB[i]) {dp[i][j] = Math.min(Math.min(dp[i][j - 1], dp[i - 1][j]), dp[i - 1][j - 1]) + 1;} else {dp[i][j] = Math.min(dp[i][j - 1], dp[i - 1][j]) + 1;}}}System.out.println(dp[n - 1][m - 1]);}
}

https://blog.csdn.net/weixin_52908342/article/details/135737063


http://www.mrgr.cn/news/16317.html

相关文章:

  • 鸿蒙版本号管理问题
  • 【三十四】springboot+easyRule初识规则引擎
  • Node.js与SQLite:为何这对组合是开发者的优选?
  • 【秋招笔试】8.24阿里控股秋招(研发岗)-三语言题解
  • 什么是in-the-wild image(野生图像)?怎么更好的利用这些图像(通过BLIP)
  • 人工智能100个AI术语
  • 21. Map接口中keySet()、values()和entrySet()方法的区别是什么?它们各自返回什么内容?
  • 科技改变搜索习惯:Anytxt Searcher,重新定义你的信息获取方式!
  • 美股DT有没有程序化软件或者指标选股工具
  • nginx部署前端vue项目
  • SpringBoot + Vue实现websocket
  • AI写作神器!这四款免费工具让你文思泉涌
  • 代码生成技术的现状与未来发展方向
  • 卧室无主灯照明布局:打造温馨舒适的私密空间
  • leetcode 147.对链表进行插入排序
  • RK3588 系列之1—串口连接
  • TQRFSOC开发板47DR ADC输入采集测试(二)
  • Mac下的压缩包和Win看到的不一样怎么办 Mac压缩后Win电脑看文件名会乱码
  • Python优化算法18——教与学优化算法(TLBO)
  • 百元蓝牙耳机品牌哪个牌子好?入围四大排名蓝牙耳机推荐