题目描述
Given two strings word1
and word2
, return the minimum number of steps required to make word1
and word2
the same.
In one step, you can delete exactly one character in either string.
Example 1:
Input: word1 = "sea", word2 = "eat" Output: 2 Explanation: You need one step to make "sea" to "ea" and another step to make "eat" to "ea".
Example 2:
Input: word1 = "leetcode", word2 = "etco" Output: 4
Constraints:
1 <= word1.length, word2.length <= 500
word1
andword2
consist of only lowercase English letters.
解题思路
【C++】
class Solution {
public:
int minDistance(string word1, string word2) {
int n = word1.size(), m = word2.size();
vector<int> dp(m + 1, 0);
for (int i = 1; i <= n; i++) {
vector<int> curr(m + 1, 0);
for(int j = 1; j <= m; j++) {
if (word1[i-1] == word2[j-1]) {curr[j]= 1 + dp[j-1];}
else {curr[j] = max(dp[j], curr[j-1]);}
}
dp = curr;
}
return n - dp[m] + m - dp[m];
}
};
【Java】
class Solution {
public int minDistance(String word1, String word2) {
int n = word1.length(), m = word2.length();
int[] dp = new int[m + 1];
for (int i = 1; i <= n; i++) {
int[] curr = new int[m + 1];
for(int j = 1; j <= m; j++) {
if (word1.charAt(i-1) == word2.charAt(j-1)) {curr[j] = 1 + dp[j-1];}
else {curr[j] = Math.max(dp[j], curr[j-1]);}
}
dp = curr;
}
return n - dp[m] + m - dp[m];
}
}