72. Edit Distance
2016-05-13 16:57
246 查看
Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.)
You have the following 3 operations permitted on a word:
a) Insert a character
b) Delete a character
c) Replace a character
Subscribe to see which companies asked this question
题意:计算编辑距离
思路:dp[i][j]表示转换word1[0, i]到word2[0, j]所需的最小步数,则dp[i][j] = min{ dp[i-1][j-1] + carry, dp[i-1][j]+1, dp[i][j-1]+1} carry=0 if word1[i]==word2[j], else carry=1;
You have the following 3 operations permitted on a word:
a) Insert a character
b) Delete a character
c) Replace a character
Subscribe to see which companies asked this question
题意:计算编辑距离
思路:dp[i][j]表示转换word1[0, i]到word2[0, j]所需的最小步数,则dp[i][j] = min{ dp[i-1][j-1] + carry, dp[i-1][j]+1, dp[i][j-1]+1} carry=0 if word1[i]==word2[j], else carry=1;
class Solution { public: int minDistance(string word1, string word2) { int m = word1.size(); int n = word2.size(); if (m == 0 || n == 0) return m | n; vector<vector<int> > dp(m + 1, vector<int>(n + 1, 0)); for (int i = 0; i < n + 1; i++){ dp[0][i] = i; } for (int i = 0; i < m + 1; i++){ dp[i][0] = i; } for (int i = 1; i < m + 1; i++){ for (int j = 1; j < n + 1; j++){ if (word1[i - 1] == word2[j - 1]) dp[i][j] = dp[i - 1][j - 1]; else dp[i][j] = min(dp[i - 1][j - 1], min(dp[i - 1][j], dp[i][j - 1])) + 1; } } return dp[m] ; } };
相关文章推荐
- 详解C++各种智能指针: auto_ptr, shared_ptr, weak_ptr, scoped_ptr
- JAVA单元测试Junit
- mysql tcp 4层负载
- mysql tcp 4层负载
- 微信内置浏览器的JsAPI(WeixinJSBridge续)[转载]
- LINQ,EF联合查询join
- POJ 3264Balanced Lineup(RMQ)
- full decommisson of GDC
- easyUi 添加
- hadoop hive安装,并使用mysql数据库
- Android的View绘制流程
- POJ 1363 Rails
- 求一个数的二进制逆序之后所对应的数
- @html.ActionLink的几种参数格式
- redhat6.4 zabbix3.0.2安装
- json用法及问题解决
- 15.7 擦除的神秘之处
- BaseAction
- apache CXF wsdl2java工具的使用
- AndroidAnnotations框架的使用详解