动规啊,头大
动规五部曲走起
if(word1[i-1]==word2[j-1])
不变
else//此时word1[i-1]和word2[j-1]的字符不一样
增
删
改
当word1和word2在长度为i-1、j-1时的字符相同的时候,相当于编辑距离等同于长度为i-2、j-2的时候的编辑距离,因此dp[i][j]=dp[i-1][j-1]
当word1和word2在长度为i-1时的字符不同时,
所以当word1[i-1]!=word2[j-1]时,计算增删改哪个的长度最小,极为dp[i][j]
if(word1[i-1]==word2[j-1])
dp[i][j]=dp[i-1][j-1];
else//此时word1[i-1]和word2[j-1]的字符不一样
dp[i][j]=min({dp[i-1][j]+1,dp[i][j-1]+1,dp[i-1][j-1]+1});
for (int i = 0; i <= word1.size(); i++)
dp[i][0] = i;
for (int j = 0; j <= word2.size(); j++)
dp[0][j] = j;
for(int i=1;i<=word1.size();i++)
for(int j=1;j<=word2.size();j++)
if(word1[i-1]==word2[j-1])
dp[i][j]=dp[i-1][j-1];
else//此时word1[i-1]和word2[j-1]的字符不一样
dp[i][j]=min({dp[i-1][j]+1,dp[i][j-1]+1,dp[i-1][j-1]+1});