LeetCode 72. Edit Distance
Posted 約束の空
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 72. Edit Distance相关的知识,希望对你有一定的参考价值。
典型DP题,思路上和 LCS 很像。
dp[i][j] 表示word1前i个 word2前j个 所需的最小操作数。
base case: dp[i][0]=i, dp[0][j]=j. 需要额外注意这里的base case。
dp[i][j] = dp[i-1][j-1] if word1[i-1]==word2[j-1]
min{ dp[i-1][j-1], dp[i-1][j], dp[i][j-1] } + 1 o/w
不相等的时候 dp[i-1][j-1]+1 表示把不相等的replace一下,dp[i-1][j]+1 表示把word1减少一个字符,dp[i][j-1]+1 表示把word2减少一个字符。(增加一个字符和减少一个字符是等价的)
class Solution { public: int minDistance(string word1, string word2) { vector<vector<int>> dp(word1.size()+1,vector<int>(word2.size()+1,0)); for (int i=1;i<=word1.size();++i) dp[i][0]=i; for (int j=1;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 dp[i][j] = min(dp[i-1][j-1], min(dp[i-1][j], dp[i][j-1])) + 1; } } return dp[word1.size()][word2.size()]; } };
以上是关于LeetCode 72. Edit Distance的主要内容,如果未能解决你的问题,请参考以下文章