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

力扣72. 编辑距离(动态规划)

Problem: 72. 编辑距离

文章目录

  • 题目描述
  • 思路
  • 复杂度
  • Code

题目描述

在这里插入图片描述在这里插入图片描述

思路

由于易得将字符串word1向word2转换和word2向word1转换是等效的,则我们假定统一为word1向word2转换!!!

1.确定状态:我们假设现在有下标i,j分别指向字符串word1和word2尾部的字符,dp(i,j)表示当前的操作则:

1.1. dp(i- 1, j) + 1;表示删除,直接把word1[i]的这个字符删除掉,并前移i,继续跟j对比,同时操作数加一;
1.2. dp(i, j - 1) + 1;表示插入,直接把word1[1]处的这个字符插入到word2[j]处,并前移动j,继续和i对比;同时操作数加一;
1.3. dp(i - 1, j - 1) + 1;表示替换,将word1[i]替换为word2[j],同时往前移动i,j继续对比,同时操作数加一

2.确定状态转移方程:由于上述易得dp[i][j] = min(dp[i - 1][j] + 1;dp[i][j - 1] + 1;dp[i - 1][j - 1] + 1);

复杂度

时间复杂度:

O ( m × n ) O(m\times n) O(m×n)

空间复杂度:

O ( m × n ) O(m\times n) O(m×n)

Code

class Solution {
public:/*** Dynamic programming** @param word1 Given string1* @param word2 Given string2* @return int*/int minDistance(string word1, string word2) {int word1Len = word1.length();int word2Len = word2.length();vector<vector<int>> dp(word1Len + 1, vector<int>(word2Len + 1));for (int i = 1; i <= word1Len; ++i) {dp[i][0] = i;}for (int j = 1; j <= word2Len; ++j) {dp[0][j] = j;}for (int i = 1; i <= word1Len; ++i) {for (int j = 1; j <= word2Len; ++j) {if (word1.at(i - 1) == word2.at(j - 1)) {dp[i][j] = dp[i - 1][j - 1];} else {dp[i][j] = min3(dp[i - 1][j] + 1, dp[i][j - 1] + 1, dp[i - 1][j - 1] + 1);}}}return dp[word1Len][word2Len];}/*** Find the maximum of the three numbers** @param a Given number* @param b Given number* @param c Given number* @return int*/int min3(int a, int b, int c) {return min(a, min(b, c));}
};

相关文章:

  • EasyRecovery软件免费版与付费版有哪些功能区别?
  • Ps:污点修复画笔工具
  • 【Linux】线程同步
  • 《白话C++》第10章 STL和boost,Page67~70 std::auto_ptr
  • react中如何做到中断diff过程和恢复
  • 中科院一区论文复现,改进蜣螂算法,Fuch映射+反向学习+自适应步长+随机差分变异,MATLAB代码...
  • (13)Hive调优——动态分区导致的小文件问题
  • 【大数据Hive】hive 表设计常用优化策略
  • 链表的回文结构
  • 【Java万花筒】数据流的舵手:大数据处理和调度库对比指南
  • C语言if语句底层原理,从汇编深入理解
  • MIT-BEVFusion系列八--onnx导出1 综述及相机网络导出
  • StarRocks表设计——分区分桶与副本数
  • 基于微信小程序的健身房私教预约系统,附源码
  • 极其抽象的SpringSecurity理解
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • DOM的那些事
  • Druid 在有赞的实践
  • js继承的实现方法
  • js算法-归并排序(merge_sort)
  • Python学习之路16-使用API
  • React-生命周期杂记
  • SQLServer插入数据
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 百度小程序遇到的问题
  • 基于 Babel 的 npm 包最小化设置
  • 排序算法学习笔记
  • 译自由幺半群
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • 扩展资源服务器解决oauth2 性能瓶颈
  • 容器镜像
  • #预处理和函数的对比以及条件编译
  • (1)常见O(n^2)排序算法解析
  • (JS基础)String 类型
  • (LeetCode) T14. Longest Common Prefix
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (三)elasticsearch 源码之启动流程分析
  • (转)负载均衡,回话保持,cookie
  • (转)视频码率,帧率和分辨率的联系与区别
  • ***测试-HTTP方法
  • ***利用Ms05002溢出找“肉鸡
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .NET Core 成都线下面基会拉开序幕
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • @基于大模型的旅游路线推荐方案
  • [ 英语 ] 马斯克抱水槽“入主”推特总部中那句 Let that sink in 到底是什么梗?
  • [Android学习笔记]ScrollView的使用
  • [Angular] 笔记 8:list/detail 页面以及@Input
  • [autojs]逍遥模拟器和vscode对接
  • [C# WPF] DataGrid选中行或选中单元格的背景和字体颜色修改
  • [C#小技巧]如何捕捉上升沿和下降沿
  • [CF226E]Noble Knight's Path
  • [IDF]被改错的密码