我是靠谱客的博主 知性月亮,最近开发中收集的这篇文章主要介绍【动态规划】LeetCode1092. 最短公共超序列,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1092. 最短公共超序列

 给定字符串a,b,求a,b的最短公共超序列,即a,b同时是这个序列的子序列且这个序列最短。

转化位编辑距离的问题

【动态规划】区间dp:编辑距离_暮色_年华的博客-CSDN博客

问题可以转化为:

对a进行添加操作,使得添加后的a包含b,求最少的添加次数。

 解释:

如果想要在a[i]后添加一个字符后做到a包含b,那么必须使a[ 1 ~ i ]包含b[ 1~ j-1 ],即 在这种情况下  dp[ i ] [ j ] = dp[ i ][ j - 1 ] + 1 。

如果在a[i]后不添加字符就可以做到a包含b,那么当 a[ i ] ! =b[ j ] 时,把a[i]去掉后a依然可以包含b[j],所以在这种情况下,dp[ i ][ j ] = dp[ i-1 ][ j ]

当a[ i ] = = b [ j ] 时 , 可以 不用 a[ i ]取匹配 b[ j ],dp[ i ][ j ]=dp[ i -1 ][ j ],也可以用a [ i ] 去匹配

b[ j ],dp[ i ][ j ]=dp[ i-1 ][ j- 1]

?用for循环逆序输出结果。

class Solution {
public:
    string shortestCommonSupersequence(string a, string b) {
        int n = a.size(), m = b.size(), INF = 1e8;
        vector<vector<int>> f(n + 1, vector<int>(m + 1, INF));
        for (int i = 0; i <= n; i ++ ) f[i][0] = 0;
        for (int i = 1; i <= m; i ++ ) f[0][i] = i;

        for (int i = 1; i <= n; i ++ )
            for (int j = 1; j <= m; j ++ ) {
                f[i][j] = min(f[i][j - 1] + 1, f[i - 1][j]);
                if (a[i - 1] == b[j - 1])
                    f[i][j] = min(f[i][j], f[i - 1][j - 1]);
            }

        string res;
        for (int i = n, j = m; i >= 0;) {
            if (!i || !j || a[i - 1] != b[j - 1]) {
                if (j && f[i][j] == f[i][j - 1] + 1) {
                    res += b[ -- j];
                } else {
                    if (i) res += a[ -- i];
                    else i -- ;
                }
            } else {
                if (f[i][j] == f[i][j - 1] + 1) {
                    res += b[ -- j];
                } else if (f[i][j] == f[i - 1][j]) {
                    res += a[ -- i];
                } else {
                    res += a[ -- i];
                    j -- ;
                }
            }
        }

        reverse(res.begin(), res.end());
        return res;
    }
};

最后

以上就是知性月亮为你收集整理的【动态规划】LeetCode1092. 最短公共超序列的全部内容,希望文章能够帮你解决【动态规划】LeetCode1092. 最短公共超序列所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(72)

评论列表共有 0 条评论

立即
投稿
返回
顶部