首页 > 代码库 > Edit Distance

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] + 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 };

 

Edit Distance