leetcode 712 Minimum ASCII Delete Sum for Two Strings

来源:互联网 发布:淘宝上海故事披肩 编辑:程序博客网 时间:2024/05/21 06:49

712 Minimum ASCII Delete Sum for Two Strings

给你两个字符串s1和s2,在它们中分别删除一些字符后,使得s1和s2剩下的字符串相等。求删除的字符串的最小ASCII和。

算法

  • 首先将题意转换一下:

    因为s1和s2给定后,它们的总的ASCII和是不变的,求删除掉的字符的最小ASCII和,就是求最后s1和s2剩下的那个相等的字符串的最大ASCII和。

    也就是我们现在需要在s1和s2中找出它们的ASCII值最大的公共字符序列。

  • 然后同样利用动态规划的思想来解题,找出状态转移方程。

状态转移方程:

记号:dp[i][j]表示s1的前i个字符和s2的前j个字符的最大ASCII公共字符序列的ASCII和

dp[i][j] = dp[i-1][j-1] +ASCII(s1[i]) (s1[i]==s2[j])

max(dp[i-1][j],dp[i][j-1]) (s1[i]!=s2[j])

0 (i==0||j==0)

code

class Solution {public:    int minimumDeleteSum(string s1, string s2) {        vector<vector<int>> dp(s1.size()+1, vector<int>(s2.size()+1, 0));        int total = 0;        for (int i = 1; i < s1.size()+1; i++){            total += (int)s1[i - 1];            for (int j = 1; j < s2.size()+1; j++){                if(i==1) total += (int)s2[j - 1];                if(s1[i-1]!=s2[j-1]){                    dp[i][j] = max(dp[i - 1][j],dp[i][j-1]);                }                else{                    dp[i][j] = dp[i - 1][j - 1] + (int)s1[i-1];                }            }        }        return total - 2 * dp[s1.size()][s2.size()];    }};

算法时间复杂度:O(|s1|*|s2|)

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 柳下挥作品集 柳下挥吧 柳下挥的邻家 邻家 柳下挥 柳下挥 天才医生 柳下挥 小妖 柳下挥新作 贴身保镖 柳下挥 柳下挥的近身保镖 柳下挥qq 柳下挥txt 柳下挥所有作品 柳下挥作品同桌凶猛 天才医生柳下挥下载 柳下挥天才医生下载 柳下惠作品 靳后传 柳卿书 柳如眉怀孕 花都之乱柳如眉大结局 柳如眉 芙蓉如面柳如眉 柳如丝 柳如眉少东全集续写 铁血使命柳如烟被脱 郭仪柳如烟 花都之母柳如眉全文阅读 秦言柳如雪 柳如烟郭义免费 出轨柳如眉大结局 都市医圣郭义柳如烟 你是我的未婚妻柳如烟 快穿之原女主的心愿 记忆如柳 张龙柳倩全文免费阅读 张龙柳倩完整章节目录 龙利鱼柳的做法大全 龙利鱼柳的家常做法 晴天张龙柳倩免费阅读 煎龙利鱼柳的做法 龙利鱼柳的做法 云龙柳 十月蛇胎柳龙庭结局