一、题目说明

题目72. Edit Distance,计算将word1转换为word2最少需要的操作。操作包含:插入一个字符,删除一个字符,替换一个字符。本题难度为Hard!

二、我的解答

这个题目一点思路也没,就直接看答案了。用的还是dp算法,dp[n1+1][n2+1]中的dp[i][j]表示将word1的前i位,变为word2的前j位需要的步骤。注意第1行是空,第1列也是空。

1.第一行中,dp[0][i]表示空字符""到word2[0,...,i]需要编辑几次

2.第一列中,dp[i][0]表示空字符到word2[0,...,i]需要编辑几次

3.循环计算dp的值

if(word1[i]==word2[j]){
dp[i][j] == dp[i-1][j-1]
}else{
dp[i][j]=min(dp[i−1][j−1],dp[i][j−1],dp[i−1][j])+1
}

有了方法,实现不难:

class Solution{
public:
int minDistance(string word1,string word2){
int n1 = word1.size(),n2= word2.size();
if(n1<=0) return n2;
if(n2<=0) return n1;
vector<vector<int>> dp(n1+1,vector<int>(n2+1,0));
//初始化第1行
for(int i=0;i<=n2;i++){
dp[0][i] = i;
} //初始化第1列
for(int i=0;i<=n1;i++){
dp[i][0] = i;
} //计算dp矩阵
// if(word1[i]==word2[j]){
// dp[i][j] == dp[i-1][j-1]
// }else{
// dp[i][j]=min(dp[i-1][j-1],dp[i][j-1],dp[i-1][j])+1
// }
for(int i=1;i<=n1;i++){//行
for(int j=1;j<=n2;j++){//列
if(word1[i-1]==word2[j-1]) {
dp[i][j] = dp[i-1][j-1];
}else{
dp[i][j] = min(min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1])+1;
}
}
}
return dp[n1][n2];
}
};

性能如下:

Runtime: 16 ms, faster than 40.38% of C++ online submissions for Edit Distance.
Memory Usage: 11.3 MB, less than 62.50% of C++ online submissions for Edit Distance.

三、优化措施

今天做这么多吧,有点晕了。明天继续!

再回头看看题目Edit Distance,我好像以前做过,不过忘记了。

最新文章

  1. 2015.2.16 关于delphi web控件打开新网页时弹出关闭页面(js代码)出错的解决办法研究
  2. SQLSERVER排查CPU占用高的情况
  3. Stream Processing for Everyone with SQL and Apache Flink
  4. 为您的Android,iOS等应用加入声波传输功能
  5. python异常处理try,except,else,finally,raise
  6. HDOJ4006 The kth great number 【串的更改和维护】
  7. LinkCode 下一个排列、上一个排列
  8. iOS中 Realm错误总结整理 韩俊强的博客
  9. oracle 11g log archive mode flashback
  10. php(curl请求)测试接口案例
  11. MongoError: no primary found in replicaset
  12. NopCommerce源码架构
  13. vue中解决跨域问题
  14. python基础——类定义(转)
  15. TFTP error: &#39;Only absolute filenames allowed&#39; (2)
  16. windows安装sqlite
  17. Linux 键盘输入#的时候变成&#163;
  18. 【node错误】/usr/bin/env: node: No such file or directory
  19. tensorflow训练线性回归模型
  20. argsort

热门文章

  1. MySQL数据库渗透及漏洞利用总结
  2. Tiptop ERP 采购运费一键分摊
  3. SpringBoot2.x打包成war(看这篇就够了)
  4. python 轮询,长轮询
  5. 你不知道的JavaScript下卷
  6. Javaweb版四则运算
  7. 题解【AcWing902】最短编辑距离
  8. Java判断一个字符串是否有中文
  9. vmware运行ubuntu虚拟机出现诡异的鼠标闪烁
  10. 2020牛客寒假算法基础集训营5 B.牛牛战队的比赛地 (二分/三分)