侧边栏壁纸
博主头像
Hope博主等级

努力赚钱的工科研究生

  • 累计撰写 362 篇文章
  • 累计创建 129 个标签
  • 累计收到 5 条评论
标签搜索

LeetCode 97. 交错字符串

Hope
2022-02-21 / 0 评论 / 0 点赞 / 397 阅读 / 637 字
温馨提示:
本文最后更新于 2022-02-21,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

LeetCode 97. 交错字符串

思路:
f[i][j]状态表示为是否可以交错拼成s3,集合划分以s3最后一个字符串的来源划分,状态计算为f[i][j] = f[i-1][j] || f[i][j-1],第一种需要保证s3[i+j] == s[i],第二种需要保证s3[i+j] == s2[j]。

这道题用双指针是错的,因为对于s3的某个字符来说,可能此时s1与s2都可以凑出来这个字符,但是一旦选错了,最后就不能恰好的拼成s3。

代码:

class Solution {
public:
    bool isInterleave(string s1, string s2, string s3) {
        int n=s1.size();
        int m=s2.size();
        if(n + m != s3.size()) return false;
        vector<vector<bool>> f(n + 1,vector<bool> (m + 1));
        s1 = ' ' + s1;
        s2 = ' ' + s2;
        s3 = ' ' + s3;
        for(int i=0;i<=n;i++){
            for(int j=0;j<=m;j++){
                //空串 + 空串 可以频 空串
                if(!i && !j) f[i][j]=true;
                if(i && s3[i+j] == s1[i]) f[i][j] = f[i-1][j];
                if(j && s3[i+j] == s2[j]) f[i][j] = f[i][j] || f[i][j-1];
            }
        }
        return f[n][m];
    }
};
0

评论区