DP+滚动数组。注意长度为n的string有n+1个状态。
class Solution {
public:
int minDistance(string word1, string word2) {
const int n1 = word1.size();
const int n2 = word2.size();
vector<int> step(n2+1, -1);
int last = -1;
for(int i=0; i<=n2; i++)
step[i] = i;
for(int i=1; i<=n1; i++)
{
last = step[0];
step[0] = i;
for(int j=1; j<=n2; j++)
{
int upper = step[j];
if(word1[i-1] == word2[j-1])
step[j] = last;
else
step[j] = min(last, min(step[j], step[j-1]))+1;
last = upper;
}
}
return step[n2];
}
};