Leetcode——583. Delete Operation for Two Strings
阿新 • • 發佈:2019-02-16
題目原址
題目描述
Given two words word1 and word2, find the minimum number of steps required to make word1 and word2 the same, where in each step you can delete one character in either string.
Example 1:
Input: “sea”, “eat”
Output: 2
Explanation: You need one step to make “sea” to “ea” and another step to make “eat” to “ea”.
Note:
- The length of given words won’t exceed 500.
- Characters in given words can only be lower-case letters.
解題思路
給定兩個字串,通過刪除字串中的字元使得兩個字串相等。這裡可以看出,最後兩個字元相等就是找到兩個給定字串的相同子串,而刪除的元素個數應該是:兩個字串的長度 - 兩個給定字串的相同子串個數 * 2。而找兩個字串的最長相同子串的長度一般都使用dp來尋找。兩個字串是通過錯位的方式進行判斷是否是相同子串的。
AC程式碼
class Solution {
public int minDistance(String word1, String word2) {
int[][] dp = new int[word1.length() + 1][word2.length() + 1];
for(int i = 1; i <= word1.length(); i++) {
for(int j = 1; j <= word2.length(); j++) {
if(word1.charAt(i - 1) == word2.charAt(j - 1)) {
dp[i][j] = dp[i - 1 ][j -1] + 1;
}else{
dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
}
}
}
return word1.length() + word2.length() - 2 * dp[word1.length()][word2.length()];
}
}