题目原址
https://leetcode.com/problems/delete-operation-for-two-strings/description/
题目描述
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()];
}
}