2022.02.23 - SX10-50.编辑距离

news/2024/10/30 9:22:41/

文章目录

  • 1. 题目
  • 2. 思路
    • (1) 动态规划
  • 3. 代码

1. 题目

在这里插入图片描述

2. 思路

(1) 动态规划

  • 题目中给出的三种操作可以简化为以下三种操作:
    1. 向字符串word1插入一个字符;
    2. 向字符串word2插入一个字符;
    3. 修改字符串word1的一个字符。
  • dp[i][j]表示使字符串word1的前i个字符和字符串word2的前j个字符相等的最少操作次数。
  • 对于前两个操作,状态转移方程为dp[i][j]=dp[i-1][j]+1和dp[i][j]=dp[i][j-1]+1。
  • 对于第三个操作,若两个字符相等,则dp[i][j]=dp[i-1][j-1],否则,dp[i][j]=dp[i-1][j-1]+1。
  • 最终的dp[i][j]取三种操作的最小值。

3. 代码

public class Test {public static void main(String[] args) {}
}class Solution {public int minDistance(String word1, String word2) {char[] c1 = word1.toCharArray();char[] c2 = word2.toCharArray();int n1 = c1.length;int n2 = c2.length;if (n1 * n2 == 0) {return n1 + n2;}int[][] dp = new int[n1 + 1][n2 + 1];for (int i = 0; i <= n1; i++) {dp[i][0] = i;}for (int j = 0; j <= n2; j++) {dp[0][j] = j;}for (int i = 1; i <= n1; i++) {for (int j = 1; j <= n2; j++) {if (c1[i - 1] == c2[j - 1]) {dp[i][j] = Math.min(dp[i - 1][j] + 1, Math.min(dp[i][j - 1] + 1, dp[i - 1][j - 1]));} else {dp[i][j] = Math.min(dp[i - 1][j] + 1, Math.min(dp[i][j - 1] + 1, dp[i - 1][j - 1] + 1));}}}return dp[n1][n2];}
}

http://www.ppmy.cn/news/155046.html

相关文章

2022.02.26 - SX10-52.回文子串

文章目录 1. 题目2. 思路(1) 动态规划 3. 代码 1. 题目 2. 思路 (1) 动态规划 dp[i][j]表示字符串s的下标为[i,j]的子串是否是回文子串。当chars[i]chars[j]且下标为[i1,j-1]的子串是回文子串时&#xff0c;可判定下标为[i,j]的子串也是回文子串&#xff0c;即dp[i][j]true。…

2022.02.26 - SX10-53.最长回文子序列

文章目录 1. 题目2. 思路(1) 动态规划 3. 代码 1. 题目 2. 思路 (1) 动态规划 dp[i][j]表示字符串s的下标为[i,j]的最长回文子序列的长度。若chars[i]chars[j]&#xff0c;则dp[i][j]dp[i1][j-1]2&#xff1b;否则&#xff0c;dp[i][j]取dp[i][j-1]和dp[i1][j]中较大值。 3.…

2022.02.12 - SX10-29.打家劫舍

文章目录 1. 题目2. 思路(1) 动态规划 3. 代码 1. 题目 2. 思路 (1) 动态规划 dp[i]表示打劫前i个房屋获得的最高金额。对于第i个房屋&#xff0c;有两种选择&#xff0c;若实施打劫&#xff0c;则获得的金额为dp[i-2]nums[i]&#xff1b;若不实施打劫&#xff0c;则获得的金…

2022.02.17 - SX10-39.买卖股票的最好时机含手续费

文章目录 1. 题目2. 思路(1) 动态规划 3. 代码 1. 题目 2. 思路 (1) 动态规划 只需在计算dp[i][1]时&#xff0c;考虑前一天持有股票而这一天卖出的情况下&#xff0c;减去手续费即可。 3. 代码 public class Test {public static void main(String[] args) {} }class Solu…

2022.02.02 - SX10-24.完全平方数

文章目录 1. 题目2. 思路(1) 动态规划 3. 代码 1. 题目 2. 思路 (1) 动态规划 dp[i]表示和为i的完全平方数的最少数量&#xff0c;则可以枚举[1,根号i]的所有数字&#xff0c;对于数字j来说&#xff0c;dp[i]dp[i-j*j]1。对于每一个数字i&#xff0c;都要遍历其所有的[1,根号…

2022.01.16 - SX10-16.目标和

文章目录 1. 题目2. 思路(1) 动态规划(2) 动态规划优化 3. 代码 1. 题目 2. 思路 (1) 动态规划 这道题可以转化为0/1背包问题&#xff0c;由于总和sum和目标和target已经确定&#xff0c;因此&#xff0c;要求的即是从数组中挑出和为(sum-target)/2的方案数。首先确定动态规划…

2022.01.18 - SX10-21.组合总和 Ⅳ

文章目录 1. 题目2. 思路(1) 动态规划 3. 代码 1. 题目 2. 思路 (1) 动态规划 动态规划数组dp[i]表示总和为i的组合的个数&#xff0c;初始化时&#xff0c;dp[0]1。对于总和为i-num的每一种排列&#xff0c;在最后添加num后即可得到总和为i的排列&#xff0c;因此&#xff0…

2022.01.19 - SX10-22.爬楼梯

文章目录 1. 题目2. 思路(1) 动态规划 3. 代码 1. 题目 2. 思路 (1) 动态规划 动态规划数组dp[i]表示爬到第i个台阶的方案数&#xff0c;累加最后一步的所有方案数即可。注意&#xff01;转化为完全背包问题即为容量在外&#xff0c;物品在内。 3. 代码 public class Test …