给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。
你可以对一个单词进行如下三种操作:
插入一个字符
删除一个字符
替换一个字符
题源:https://leetcode-cn.com/problems/edit-distance/
代码:
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]; } };