72. 编辑距离 力扣(困难) dp想不出来

给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。

你可以对一个单词进行如下三种操作:

插入一个字符
删除一个字符
替换一个字符

 

 

题源:https://leetcode-cn.com/problems/edit-distance/

题解:https://leetcode-cn.com/problems/edit-distance/solution/dong-tai-gui-hua-72-bian-ji-ju-chi-by-bi-okfr/

 

 

代码:

class Solution {
public:
    int minDistance(string word1, string word2) {   
    int dp[505][505];
    int l1=word1.length();
    int l2=word2.length();
    memset(dp,0,sizeof(dp));
    //  必须初始化
    for(int i=1;i<=l2;i++) dp[0][i]=i;
    for(int i=1;i<=l1;i++) dp[i][0]=i;
    //  dp[i][j]表示word1[0-i]和word2[0-j]匹配,最少操作步骤
    for(int i=1;i<=l1;i++)
      for(int j=1;j<=l2;j++)
      {
          if(word1[i-1]==word2[j-1]) dp[i][j]=dp[i-1][j-1];
            else dp[i][j]=min(dp[i][j-1],min(dp[i-1][j],dp[i-1][j-1]))+1;   //  进行插入、删除,替换,谁步骤更少,注意,插入难以理解
      }
    
     return dp[l1][l2];
    }
};

 

posted on 2021-07-15 12:10  Yxter  阅读(48)  评论(0编辑  收藏  举报

导航