LeetCode97—Interleaving String

来源:互联网 发布:战舰世界详细数据 编辑:程序博客网 时间:2024/06/06 05:16

LeetCode97—Interleaving String

原题

Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2.

For example,
Given:
s1 = “aabcc”,
s2 = “dbbca”,

When s3 = “aadbbcbcac”, return true.
When s3 = “aadbbbaccc”, return false.

分析

动态规划,dp[i][j]表示前i个字符的s1子串和前j个字符的s2子串的是否能组成s3前i+j1个字符的子串。
现在讨论dp[i][j]的递推关系:
1. 当s3的第i+j1个字符来自于s1,即s3[i+j1]==s1[i1],那么当dp[i1][j]true时,dp[i][j]也一定为true
2. 同理,当s3的第i+j1个字符来自于s2,即s3[i+j1]==s2[j1],那么当dp[i][j1]true时,dp[i][j]也一定为true
3. 最后返回值为dp[s1.size()][s2.size()]

动归方程:

dp[i][j]={dp[i1][j]dp[i][j1]if s3[i+j1]==s1[i1]dp[i1][j] is trueif s3[i+j1]==s2[j1]dp[i][j1] is true

代码

根据方程写出代码:

class Solution {public:    bool isInterleave(string s1, string s2, string s3) {        int len1 = s1.size();        int len2 = s2.size();        int len3 = s3.size();        if ((len1 + len2) != len3)            return false;        if (len1 == 0 && len1 == len2&&len2 == len3)            return true;        vector<vector<bool>>dp(len1 + 1, vector<bool>(len2 + 1));        dp[0][0] = true;        for (int i = 1; i <= len1; i++)        {            if (s1[i - 1] == s3[i - 1] )                dp[i][0] = dp[i - 1][0];        }        for (int j = 1; j <= len2; j++)        {            if (s2[j - 1] == s3[j - 1] )                dp[0][j] = dp[0][j - 1];        }        for (int i = 1; i <= len1; i++)        {            for (int j = 1; j <= len2; j++)            {                if ((s1[i - 1] == s3[i + j - 1])&&(dp[i-1][j]))                {                    dp[i][j] = dp[i - 1][j];                }                if ((s2[j - 1] == s3[i + j - 1])&&(dp[i][j-1]) )                {                    dp[i][j] = dp[i][j - 1];                }            }        }        return dp[len1][len2];    }};
1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 换单位后医保卡怎么办 单位没交失业金怎么办 沈阳医保卡密码忘了怎么办 西安网约车资格证怎么办 红跑车卡丢了怎么办 苏州住房公积金密码忘了怎么办 公积金查询密码忘记了怎么办 公积金账户密码忘记了怎么办 公积金网上查询密码忘记了怎么办 苏州改公积金密码忘了怎么办 与单位解除劳动合同公积金怎么办 在泰国钱包丢了怎么办 中山车牌网上选号后怎么办 买楼房70年以后怎么办 暂住证过期2个月怎么办 换领驾驶证超期了怎么办 车牌租出去要不回来怎么办 汽车放久了没电怎么办 上海网约车资格证怎么办 手机掉在滴滴上怎么办 在滴滴上丢手机怎么办 把东西落在出租车上怎么办 租好房子后悔了怎么办 转租房东不退押金怎么办 亲戚借户口本办公租房怎么办 7.1深圳禁行货车怎么办 怎么办无锡市的货车临时通行证 武汉医保卡密码忘了怎么办 打出租车被黑了怎么办 行李掉在出租车上怎么办 家庭农场买农机怎么办补贴 在异地买的保险怎么办 理发店被投诉工商局找我怎么办? 临安市民卡丢了怎么办 合肥分期付款买手机被骗怎么办 公司注销后还遇到投诉怎么办 超市购物结账时少收钱怎么办 卖给顾客东西时会有斜念怎么办 实体店家纺想换货怎么办 劳动仲裁裁决部分不服怎么办 劳动仲裁公司拒不履行怎么办?