空间复杂度为O(m*n)的解法是容易的。如果把空间复杂度降下来,需要对状态数组有深刻理解,一个网址讲得不错:http://www.cnblogs.com/chasuner/p/editdist.html
附录一个普通的非递归解吧
int editDistance(string s1, string s2){
int m = s1.size(), n = s2.size();
if (!m || !n) return max(m,n);
vector<vector<int>> memo(m+1, vector<int>(n+1, 0));
for (int i = 0; i < m; ++ i)
memo[i][0] = i;
for (int j = 0; j < n; ++ j)
memo[0][j] = j;
for (int i = 1 ; i <= m; ++ i){
for (int j = 1; j <= n; ++ j){
if ( s1[i] == s2[j] ) memo[i][j] = memo[i-1][j-1];
else {
memo[i][j] = min( memo[i-1][j], min(memo[i-1][j-1], memo[i][j-1]) ) + 1;
}
}
}
return memo[m][n];
}