天天看点

232、两个字符串的删除操作

题目描述:

给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符。

示例 1:

输入: “sea”, “eat”

输出: 2

解释: 第一步将"sea"变为"ea",第二步将"eat"变为"ea"

说明:

给定单词的长度不超过500。

给定单词中的字符只含有小写字母。

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/delete-operation-for-two-strings

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

其实就是求两个字符串的最长公共子串,然后拿两个长度之和减去 最长公共子串* 2

代码:

class Solution {
    public int minDistance(String word1, String word2) {
        	int len1 = word1.length();
		int len2 = word2.length();
		int dp[][] = new int[len1 + 1][len2 + 1];
		int max = 0;
		for (int i = 1; i < len1 + 1; i++) {
			for (int j = 1; j < len2 + 1; 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]);
				}
				max = Math.max(dp[i][j], max);
			}
		}
		return word1.length() + word2.length() - 2 * max;
    }
}
           

官方解释使用动态规划求解