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

Leetcode 72 编辑距离

题意理解:

        给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数  。

        你可以对一个单词进行如下三种操作:

                插入一个字符

                删除一个字符

                替换一个字符

        将word1转换为word2,可以进行三种操作:增、删、改,最少操作几次

        其中特别注意:增和删为互逆操作,其效果是一样的:在word1删除一个元素或在word2添加一个元素,都是进行一次操作效果。

        这里我们使用动态规划来进行解题。

解题思路:

        (1)定义dp数组

                dp[i][j]表示word1第i个元素前,word2第j个元素前,使word1转换为word2最少需要操作的次数。

        (2)递推公式:

           当word1[i-1]==word2[j-1]时

            无需操作: dp[i][j]=dp[i-1][j-1]

          否则:

                增|删:dp[i-1][j]+1   或   dp[i][j-1]+1

                改:    dp[i-1][j-1]+1

                即: dp[i][j]=Math.min(Math.min(dp[i-1][j]+1 ,dp[i][j-1]+1),  dp[i-1][j-1]+1 )

          (3) 初始化:

                dp[i][0] 表示把word1变为空串,则产出i个元素,即dp[i][0]=i

                同理: dp[0][j]=j                       

1.动态规划解题

public int minDistance(String word1, String word2) {int [][] dp=new int[word1.length()+1][word2.length()+1];for(int i=0;i<=word1.length();i++){dp[i][0]=i;}for(int j=1;j<=word2.length();j++){dp[0][j]=j;}for(int i=1;i<=word1.length();i++){for(int j=1;j<=word2.length();j++){if(word1.charAt(i-1)==word2.charAt(j-1)){//不操作dp[i][j]=dp[i-1][j-1];}else {dp[i][j]=Math.min(Math.min(dp[i-1][j],dp[i][j-1])+1,dp[i-1][j-1]+1);}}}return dp[word1.length()][word2.length()];}

2.复杂度分析 

时间复杂度:O(n^2)

空间复杂度:O(n^2)

http://www.lryc.cn/news/301471.html

相关文章:

  • 羊大师揭秘,如何挑选出好牧场的奶羊,该怎么看
  • MySQL数据库基础(八):DML数据操作语言
  • (09)Hive——CTE 公共表达式
  • Spring 用法学习总结(四)之 JdbcTemplate 连接数据库
  • 第 385 场 LeetCode 周赛题解
  • 什么是RabbitMQ?
  • JWT登录验证前后端设计与实现笔记
  • 自定义类型详解 ----结构体,位段,枚举,联合
  • VueCLI核心知识综合案例TodoList
  • 关于cuda路径问题
  • 六、Spring/Spring Boot整合ActiveMQ
  • 树莓派4B(Raspberry Pi 4B)使用docker搭建springBoot/springCloud服务
  • 数据库设计、JDBC、数据库连接池
  • SpringBoot实现OneDrive文件上传
  • C++初阶:容器适配器介绍、stack和queue常用接口详解及模拟实现
  • GRUB and the Boot Process on UEFI-based x86 Systems
  • 2.C语言——输入输出
  • MySQL篇之SQL优化
  • QGis —— 1、Windows10下载安装QGis及插件
  • 【打工日常】使用docker部署Dashdot工具箱
  • 使用client-only 解决组件不兼容SSR问题
  • 基于Java SSM框架实现网上报名系统项目【项目源码+论文说明】
  • 7.1 Qt 中输入行与按钮
  • 云计算基础-网络虚拟化
  • 166基于matlab的通过峭度指标与互相关系数筛选IMF进行SVD分解去噪
  • 第六十三天 服务攻防-框架安全CVE复现DjangoFlaskNode.JSJQuery
  • 最大子序和+旅行问题——单调队列
  • Unity设备分级策略
  • 自己在开发AI应用的过程总结的 Prompt - 持续更新
  • STM32——OLED菜单