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

回收那个网站做推广好优化王

回收那个网站做推广好,优化王,url提交,锦浪科技(300763) 股吧题目描述 给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数。 你可以对一个单词进行如下三种操作: 插入一个字符删除一个字符替换一个字符 原题:LeetCode 72 思路及实现 方式一:动态规划 思路…

题目描述

给定两个单词 word1word2,计算出将 word1 转换成 word2 所使用的最少操作数。

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

  1. 插入一个字符
  2. 删除一个字符
  3. 替换一个字符

原题:LeetCode 72

思路及实现

方式一:动态规划

思路

使用二维数组 dp 来保存子问题的解,其中 dp[i][j] 表示 word1 的前 i 个字符转换成 word2 的前 j 个字符所需要的最少操作数。

  • word1[i-1] == word2[j-1] 时,不需要进行操作,dp[i][j] = dp[i-1][j-1]
  • word1[i-1] != word2[j-1] 时,可以选择插入、删除或替换操作,取这三种操作的最小值加1,即 dp[i][j] = min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) + 1

代码实现

Java版本
public int minDistance(String word1, String word2) {int m = word1.length();int n = word2.length();// 创建一个二维数组dpint[][] dp = new int[m + 1][n + 1];// 初始化第一行和第一列for (int i = 0; i <= m; i++) {dp[i][0] = i;}for (int j = 0; j <= n; j++) {dp[0][j] = j;}// 填充dp数组for (int i = 1; i <= m; i++) {for (int j = 1; j <= n; j++) {if (word1.charAt(i - 1) == word2.charAt(j - 1)) {dp[i][j] = dp[i - 1][j - 1];} else {dp[i][j] = 1 + Math.min(dp[i - 1][j - 1], Math.min(dp[i - 1][j], dp[i][j - 1]));}}}return dp[m][n];
}

说明:Java版本使用了二维数组dp来保存中间结果,并通过循环填充该数组。

C语言版本
#include <stdio.h>
#include <string.h>
#include <limits.h>int minDistance(char *word1, char *word2) {int m = strlen(word1);int n = strlen(word2);// 创建一个二维数组dpint dp[m + 1][n + 1];// 初始化第一行和第一列for (int i = 0; i <= m; i++) {dp[i][0] = i;}for (int j = 0; j <= n; j++) {dp[0][j] = j;}// 填充dp数组for (int i = 1; i <= m; i++) {for (int j = 1; j <= n; j++) {if (word1[i - 1] == word2[j - 1]) {dp[i][j] = dp[i - 1][j - 1];} else {dp[i][j] = 1 + fmin(fmin(dp[i - 1][j - 1], dp[i - 1][j]), dp[i][j - 1]);}}}return dp[m][n];
}

说明:C语言版本与Java版本类似,但使用了fmin函数来取最小值。

Python3版本
def minDistance(word1: str, word2: str) -> int:m, n =len(word1), len(word2)# 创建一个二维数组dpdp = [[0] * (n + 1) for _ in range(m + 1)]# 初始化第一行和第一列for i in range(m + 1):dp[i][0] = ifor j in range(n + 1):dp[0][j] = j# 填充dp数组for i in range(1, m + 1):for j in range(1, n + 1):if word1[i - 1] == word2[j - 1]:dp[i][j] = dp[i - 1][j - 1]else:dp[i][j] = 1 + min(dp[i - 1][j - 1], dp[i - 1][j], dp[i][j - 1])return dp[m][n]

说明:Python3版本使用列表推导式创建二维数组,并使用min函数来取最小值。

Golang版本
package mainimport ("fmt""math"
)func minDistance(word1 string, word2 string) int {m, n := len(word1), len(word2)// 创建一个二维数组dpdp := make([][]int, m+1)for i := range dp {dp[i] = make([]int, n+1)}// 初始化第一行和第一列for i := 0; i <= m; i++ {dp[i][0] = i}for j := 0; j <= n; j++ {dp[0][j] = j}// 填充dp数组for i := 1; i <= m; i++ {for j := 1; j <= n; j++ {if word1[i-1] == word2[j-1] {dp[i][j] = dp[i-1][j-1]} else {dp[i][j] = 1 + int(math.Min(float64(dp[i-1][j-1]), math.Min(float64(dp[i-1][j]), float64(dp[i][j-1]))))}}}return dp[m][n]
}func main() {word1 := "horse"word2 := "ros"fmt.Println(minDistance(word1, word2)) // 输出: 3
}

说明:Golang版本使用make函数创建二维切片,并使用math.Min函数来取最小值。

复杂度分析

  • 时间复杂度:O(m * n),其中m和n分别是两个单词的长度。因为我们需要遍历两个单词的所有字符。
  • 空间复杂度:O(m * n),用于保存子问题的解。

总结

方式优点缺点时间复杂度空间复杂度
方式一逻辑清晰,易于实现需要额外的空间来保存子问题的解O(m * n)O(m * n)

相似题目

相似题目难度链接
leetcode 10中等力扣-10
leetcode 1143中等力扣-1143
leetcode 647中等力扣-647
http://www.hengruixuexiao.com/news/24722.html

相关文章:

  • 营销型网站推广服务网络课程
  • 湖南建设人力资源网证书查询百度seo和sem的区别
  • 建设新闻网站看seo
  • wordpress非插件幻灯片seo在线培训
  • 做网站建设公司南京今日新闻头条
  • 做液氮冰淇淋店网站网络营销案例分析
  • 软件网站排行榜seo网站关键词优化排名
  • 网站数据库订购10000个免费货源网站
  • frontpage可以做网站吗seo案例分析
  • 揭阳网站制作教程长沙官网seo技术厂家
  • 三亚城乡建设局网站一键优化清理手机
  • 做网站 广州上海网站建设
  • 鸿邑科技 网站建设创建app平台
  • 漂亮的网站字体css样式网络管理系统
  • 在哪个网站做兼职淘宝客服网络seo招聘
  • 设计师必备的国际设计网站百度新闻首页新闻全文
  • 做网站优化windows优化大师好用吗
  • 用html做的游戏网站网页制作成品
  • 做网站业务的 怎么跑客户今日最新抗疫数据
  • 网站制作上海杭州排名优化公司
  • 成都的做网站公司怎么用手机创建网站
  • 淄博企业做网站南宁网站建设公司排行
  • dedecms 英文网站微信小程序开发平台官网
  • 深圳企业网站制作公司河南企业网站推广
  • 王爷到 电视剧泰安seo培训
  • 网站制作排版注意事项外贸推广平台怎么做
  • 精品网名seo关键词快速排名
  • 装修材料网购平台排名关键词优化软件
  • 哪些网站可以做图片链接宁波seo排名外包
  • 深圳建网站公司哪家好南昌seo优化公司