119-编辑距离

给出两个单词word1和word2,计算出将word1 转换为word2的最少操作次数。

你总共三种操作方法:

  • 插入一个字符
  • 删除一个字符
  • 替换一个字符

样例

给出 work1="mart" 和 work2="karma"

返回 3

标签

字符串处理 动态规划

思路

使用动态规划,用二维数组dp[i][j]表示第一个字符串到i第二个字符串到j的时候需要进行多少次修改

动态转移方程为:

dp[i][j] = dp[i-1][j-1] + dp[i-1][j] (S[i]==T[j])

dp[i][j] = dp[i-1][j] (S[i]!=T[j])

过程如下:

code

class Solution {
public:
/**
* @param word1 & word2: Two string.
* @return: The minimum number of steps.
*/
int minDistance(string word1, string word2) {
// write your code here
int size1 = word1.size(), size2 = word2.size(),i = 0, j = 0;
if(size1 <= 0 ) {
return size2;
}
else if(size2 <= 0) {
return size1;
} vector<vector<int> > dp(size1+1, vector<int>(size2+1, 0));
for(i=1; i<=size1; i++) {
dp[i][0]= i;
}
for(i=1; i<=size2; i++) {
dp[0][i] = i;
}
for(i=1; i<=size1; i++) {
for(j=1; j<=size2; j++) {
if(word1[i-1] == word2[j-1]) {
dp[i][j] = dp[i-1][j-1];
}
else {
dp[i][j] = findMin(dp[i-1][j-1], dp[i][j-1], dp[i-1][j])+1;
}
}
} return dp[size1][size2];
} int findMin(int num1, int num2, int num3) {
int min = num1 > num2 ? num2 : num1;
return min > num3 ? num3 : min;
}
};

最新文章

  1. js中函数的一些理论知识
  2. [CareerCup] 18.1 Add Two Numbers 两数相加
  3. grains
  4. opencv2-新特性及Mat
  5. Iterator中hasNext(), next() 和ResultSet结果集的next方法的区别
  6. ASP.NET 5系列教程 (六): 在 MVC6 中创建 Web API
  7. 比较几种工具Python(x,y) Anaconda WinPython
  8. iOS简易柱状图(带动画)--新手入门篇
  9. windows7旗舰版激活密钥永久版免费分享
  10. Python实现kMeans(k均值聚类)
  11. NOIP2006 作业调度方案
  12. StarSpace是用于高效学习实体向量的通用神经模型
  13. Linux常用命令(第二版) --压缩解压缩命令
  14. 进入Docker容器的4种方式
  15. 普林斯顿微积分读本 大纲与重点 (by zzd)
  16. 根据IP查地理位置信息
  17. Debug的使用
  18. git解决冲突(rebase版)
  19. 查找nginx安装的路径以及相关安装操作命令
  20. Python写一个根据日期计算是星期几的模块

热门文章

  1. Sass 基础(一)
  2. 百度 suggestion 学习demo
  3. 【模板】全排列(运用STL的next_permutation)
  4. Laravel 集合的处理
  5. CSS实现表单
  6. VMware虚拟化NSX-Manager命令行更改admin用户密码
  7. php数组常用函数总结
  8. Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000
  9. 基于pygame的打砖块游戏,做到一半,不带做了
  10. 网站漏洞修复之最新版本UEditor漏洞