[LeetCode]583. Delete Operation for Two Strings

来源:互联网 发布:辐射4低配置优化 编辑:程序博客网 时间:2024/06/05 22:52

[LeetCode]583. Delete Operation for Two Strings

题目描述

这里写图片描述

思路

动态规划
实际上是找最长公共子序列
建立一个二维数组,dp[i][j]保存到word1第i位和word2第j位时最长公共的子序列的长度
更新方式详见代码

代码

#include <iostream>#include <string>#include <vector>#include <algorithm>using namespace std;class Solution {public:    int minDistace(string word1, string word2) {        if (word1.size() == 0 || word2.size() == 0)            return word1.size() + word2.size();        vector<vector<int>> dp(word1.size(), vector<int>(word2.size()));        for (int i = 0; i < word1.size(); ++i) {            for (int j = 0; j < word2.size(); ++j) {                if (i == 0 && j == 0)                    dp[i][j] = word1[i] == word2[j];                else if (i == 0)                    dp[i][j] = word1[i] == word2[j] ? 1 : dp[i][j - 1];                else if (j == 0)                    dp[i][j] = word1[i] == word2[j] ? 1 : dp[i - 1][j];                else                    dp[i][j] = word1[i] == word2[j] ? dp[i - 1][j - 1] + 1 : max(max(dp[i - 1][j], dp[i - 1][j - 1]), dp[i][j - 1]);            }        }        return word1.size() + word2.size() - (dp[word1.size() - 1][word2.size() - 1] << 1);    }};int main() {    Solution s;    cout << s.minDistace("aaa", "ababa") << endl;    system("pause");    return 0;}