1. 程式人生 > >Leetcode——583. Delete Operation for Two Strings

Leetcode——583. Delete Operation for Two Strings

題目原址

題目描述

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()]; } }