码迷,mamicode.com
首页 > 其他好文 > 详细

583. Delete Operation for Two Strings

时间:2017-05-15 09:51:25      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:either   let   exit   ==   orm   sea   lex   --   imu   

Problem statement:

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:

  1. The length of given words won‘t exceed 500.
  2. Characters in given words can only be lower-case letters.

Solution:

This is a DP solution which is like 72. Edit Distance. DP array is dp[m + 1][n + 1], m = word1.size(), n = word2.size();

dp[i][j] means how many operations need to do if we want word1(0, i) matches word2(0, j).

Initialization:

dp[0][0 ... n] = 0 ... n : means the operations we want to match the word1 and word2 if  word1 is empty.

dp[0 ... m][0] = 0 ... m : means the operations we want to match the word1 and word2 if  word2 is empty.

DP formula:

There are two situations for dp[i][j]

word1[i] == word2[j] --> dp[i][j] = dp[i - 1][j - 1] --> no need any operation

word1[i] != word2[j] --> dp[i][j] = min(dp[i -1][j], dp[i][j - 1]) + 1 --> find the optimal value from previous choice.

Return value:

dp[m][n] means operations if word1 and word2 matches.

The time complexity is O(m * n)

class Solution {
public:
    int minDistance(string word1, string word2) {
        int m = word1.size();
        int n = word2.size();
        int dp[m + 1][n + 1] = {};
        for(int i = 1; i <= m; i++){
            dp[i][0] = i;
        }
        for(int j = 1; j <= n; j++){
            dp[0][j] = j;
        }
        for(int i = 1; i <= m; i++){
            for(int j = 1; j <= n; j++){
                if(word1[i - 1] == word2[j - 1]){
                    dp[i][j] = dp[i - 1][j - 1];
                } else {
                    dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + 1;
                }
            }
        }
        return dp[m][n];
    }
};

 

583. Delete Operation for Two Strings

标签:either   let   exit   ==   orm   sea   lex   --   imu   

原文地址:http://www.cnblogs.com/wdw828/p/6854760.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!