Edit Distance

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

 

最小编辑距离

设dp[i][j]为w1前i个字符转换成w2前j个字符所需要的最小步骤,那么有

dp[i][j] = min{ 删除一个字符 dp[i-1][j] + 1, 增加一个字符 dp[i][j-1] + 1, 替换一个字符 dp[i-1][j-1] + w1[i-1] == w2[j-1] ? 0 : 1 }

截取网上的一段解释

 1 class Solution {
 2 public:
 3     int minDistance(string word1, string word2) {
 4         const int len1 = word1.length();
 5         const int len2 = word2.length();
 6         int dp[len1+1][len2+1];
 7         dp[0][0] = 0;   //初试化
 8         for(int j=1; j<=len2; ++j) dp[0][j] = j;    //不断增加字符
 9         for(int i=1; i<=len1; ++i) dp[i][0] = i;    //不断删除字符
10         for(int i=1; i<=len1; ++i)
11             for(int j=1; j<=len2; ++j)
12                 dp[i][j] = min( dp[i-1][j-1] + (word1[i-1] == word2[j-1] ? 0 : 1), min(dp[i-1][j]+1, dp[i][j-1]+1) );
13         return dp[len1][len2];
14     }
15 };

 

posted on 2014-09-06 21:05  bug睡的略爽  阅读(125)  评论(0编辑  收藏  举报

导航