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

绿色在线网站外链seo招聘

绿色在线网站,外链seo招聘,企业网站建设三个原则,响应式网页设计针对的终端有编辑距离 参考资料题目描述示例 解题思路动态规划(DP)方法 代码实现复杂度分析示例详解示例1:"nowcoder" → "new"示例2:"intention" → "execution" 总结与心得 参考资料 建议先参考下…

编辑距离

    • 参考资料
    • 题目描述
      • 示例
    • 解题思路
      • 动态规划(DP)方法
    • 代码实现
    • 复杂度分析
    • 示例详解
      • 示例1:`"nowcoder"` → `"new"`
      • 示例2:`"intention"` → `"execution"`
    • 总结与心得

参考资料

建议先参考下面一个视频和文档,然后再思考问题,不然很容易会被吓到。
——

https://programmercarl.com/0072.%E7%BC%96%E8%BE%91%E8%B7%9D%E7%A6%BB.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE
在这里插入图片描述

题目描述

给定两个字符串 str1str2,计算将 str1 转换为 str2 所需的最小操作次数。每次操作可以执行以下三种操作之一:

  • 插入一个字符
  • 删除一个字符
  • 修改一个字符

示例

  • 示例1:
    • 输入:"nowcoder", "new"
    • 输出:6
    • 解释:修改 ‘o’ 为 ‘e’,删除后续5个字符
  • 示例2:
    • 输入:"intention", "execution"
    • 输出:5
    • 解释:需要修改前5个字符

解题思路

动态规划(DP)方法

  1. 状态定义

    • dp[i][j] 表示将 str1 的前 i 个字符转换为 str2 的前 j 个字符所需的最小操作次数
  2. 状态转移方程

    • str1[i-1] == str2[j-1] 时:dp[i][j] = dp[i-1][j-1]
    • 否则,取三种操作的最小值加1:
      • 修改操作:dp[i-1][j-1] + 1
      • 插入操作:dp[i][j-1] + 1
      • 删除操作:dp[i-1][j] + 1
  3. 初始化

    • dp[i][0] = i:表示删除操作
    • dp[0][j] = j:表示插入操作

代码实现

#include <string.h>  // 引入字符串处理函数库,用于调用strlen等函数// 辅助函数:计算三个整数中的最小值
int min(int a, int b, int c) {// 使用三元运算符实现最小值计算// 首先比较a和b,取较小值,再与c比较,最终返回最小值return a < b ? (a < c ? a : c) : (b < c ? b : c);
}// 主函数:计算两个字符串之间的编辑距离
int editDistance(char* str1, char* str2) {// 获取两个字符串的长度int len1 = strlen(str1);  // str1的长度int len2 = strlen(str2);  // str2的长度// 处理空字符串情况// 如果str1为空,将str2的所有字符插入到str1中,需要len2次操作if (len1 == 0) return len2;// 如果str2为空,将str1的所有字符删除,需要len1次操作if (len2 == 0) return len1;// 创建动态规划表dp,大小为(len1+1)×(len2+1)// dp[i][j]表示str1的前i个字符转换为str2的前j个字符所需的最小操作数int dp[len1 + 1][len2 + 1];// 初始化动态规划表的第一行和第一列// dp[i][0]:将str1的前i个字符转换为空字符串,需要i次删除操作for (int i = 0; i <= len1; i++) dp[i][0] = i;// dp[0][j]:将空字符串转换为str2的前j个字符,需要j次插入操作for (int j = 0; j <= len2; j++) dp[0][j] = j;// 动态规划过程:填充dp表// 遍历str1和str2的每个字符for (int i = 1; i <= len1; i++) {for (int j = 1; j <= len2; j++) {// 如果当前字符相同,不需要额外操作,直接继承左上角的值if (str1[i - 1] == str2[j - 1]) {dp[i][j] = dp[i - 1][j - 1];} else {// 如果当前字符不同,选择三种操作的最小值 + 1// dp[i - 1][j - 1]:替换操作// dp[i][j - 1]:插入操作// dp[i - 1][j]:删除操作dp[i][j] = min(dp[i - 1][j - 1], dp[i][j - 1], dp[i - 1][j]) + 1;}}}// 返回最终的编辑距离,即dp表右下角的值return dp[len1][len2];
}

复杂度分析

  • 时间复杂度:O(mn),其中m和n分别是两个字符串的长度
  • 空间复杂度:O(mn),需要一个二维数组存储动态规划的状态

示例详解

示例1:"nowcoder""new"

  1. 对于第一个位置,两个字符串都是’n’,不需要操作
  2. 第二个位置,需要将’o’修改为’e’,操作数+1
  3. 接下来需要删除"wcoder"这5个字符,每个字符删除操作数+1
  4. 最终需要6次操作

示例2:"intention""execution"

  1. 两个字符串后缀"tion"相同,不需要操作
  2. 需要修改前5个字符,每个字符修改操作数+1
  3. 最终需要5次操作

总结与心得

这道题虽然看起来操作较多(增删改),但实际难度适中,比起IP地址字符串转换的题目要简单一些。关键在于理解动态规划的状态设计:

  1. 一开始可能会想直接用m×n的dp数组(去掉第一行第一列),但这样是不行的。因为如果两个字符串完全相同,结果应该是0,所以需要包含这种情况。

  2. 初始化很重要:第一行和第一列分别表示纯粹的删除和插入操作,这为后续的状态转移奠定了基础。

  3. 状态转移方程的设计体现了问题的本质:当字符相同时不需要操作,当字符不同时取三种操作的最小值。

http://www.dt0577.cn/news/14390.html

相关文章:

  • 建视频网站模板网站优化平台
  • 在北京大学生做家教的网站信息流广告优化师
  • 企业seo顾问公司移动端seo关键词优化
  • 深圳品牌医疗网站建设新一轮疫情最新消息
  • 什么是网站建设公司今日头条极速版官网
  • 旗舰店的网站怎么做网站建设有哪些公司
  • 政府网站建设调研阜新网站seo
  • 千牛网站上的店铺推广怎么做宣城网站seo
  • 做新闻网站编辑需要什么最新中高风险地区名单
  • 开发者选项怎么打开手机网站怎么优化关键词
  • wordpress模板导航类天津seo
  • 一个人做企业网站要多少天佛山百度seo点击软件
  • 泰国做网站赌博要判几年crm网站
  • wordpress访客注册整站seo排名费用价格
  • 做电影网站靠谱吗中国最新消息今天
  • 网站建设找什么公司好aso优化方法
  • 网站建设的目地中国万网域名注册服务内容
  • 梁园区官方网站电子商务说白了就是干什么的
  • 如何进行网站分析全国十大婚恋网站排名
  • 东莞网站推广外包深圳优化公司高粱seo较
  • 牛商网做的网站外贸独立站建站
  • seo关键词优化技巧关键词优化外包
  • wordpress.shop吴忠seo
  • 如何通过axure做网站备案域名
  • 视频网站做视频容易火seo培训教程视频
  • 怎样在网站是做宣传广告公司网站
  • 音乐网站开发 群网站怎么建设
  • 做维修那个网站发布信息好品牌宣传的推广
  • 上海建网站服务器seo技术蜘蛛屯
  • 北京免费做网站网络广告发布