题解 | #交错编号#

交错编号

https://www.nowcoder.com/practice/07f674168c784a84a264cf487396daed

知识点:

动态规划

分析:

首先如果 s3 的长度不等于 s1 的长度 + s2 的长度,肯定返回 false

如果两个指针分别指向 s1 和 s2,然后遍历 s3,如果 s3 对应的字符出现在 s1,指向 s1 的指针前进一位,反之指向 s1 的指针前进一位。

用 f[i][j] 来表示 s1 的前 i 位和 s2 的前 j 位是否可以组成 s3 的前 i + j 位,那么

如果 s3[i + j - 1] == s1[i - 1],f[i][j] |= f[i - 1][j]

如果 s3[i + j - 1] == s2[j - 1],f[i][j] |= f[i][j - 1]

如果 s3[i + j - 1] == s1[i - 1] && s3[i + j - 1] == s2[j - 1],f[i][j] = f[i - 1][j] || f[i][j - 1] || f[i][j]

否则 f[i][j] = false

编程语言:

C++

完整代码:

    bool isInterleave(string s1, string s2, string s3) {
        int len1 = s1.size(), len2 = s2.size(), len3 = s3.size();
        if(len1 + len2 != len3) return false;
        vector<vector<int>> f(len1 + 1, vector<int>(len2 + 1, false));
        f[0][0] = true;
        for(int i = 0; i <= len1; i ++)
            for(int j = 0; j <= len2; j ++){
                if(i > 0 && s3[i + j - 1] == s1[i - 1])
                    f[i][j] |= f[i - 1][j];
                if(j > 0 && s3[i + j - 1] == s2[j - 1])
                    f[i][j] |= f[i][j - 1];
            }
        return f[len1][len2];
    }

全部评论

相关推荐

饥饿的长颈鹿就要上岸...:简历五项结构 简历只放五项内容,顺序和格式如下: 一、个人信息 只写名字、电话、邮箱 不写性别、年龄、籍贯、政治面貌、微信等额外信息 二、教育经历 格式:学校名称 | 学历 | 专业 | 就读时间 从左到右排列,一行写完 如果专业和岗位对口,写1-2行主修课程;不对口就不写 学历如果不占优势,可以把教育经历放到简历靠后的位置 三、实习/项目经历 如果没有实习经历,全部写项目经历 每条经历格式:项目名 + 岗位名 + 任职时间段 下面写三到五条工作内容 每条工作内容开头必须用四个字概括,加粗,后面跟一条完整描述 所有描述必须用STAR法则来写(情境-任务-行动-结果) 每一条都要有数据支撑和具体成果 四、个人优势 可以写获得的奖项、证书 如果奖项不够,就写你熟练掌握的技能 每条也要有具体数据或成果支撑,不能空泛堆砌 五、整体要求 一页纸,不要超过一页 个人信息只写名字加电话邮箱 贝贝试一下这个方式写简历,我虽然没收到offer,至少收到了好几轮面试
点赞 评论 收藏
分享
05-10 16:48
门头沟学院 Java
程序员小白条:主要原因,投递太晚了,快手应该早点溜了,你都从去年9月开始的,半年也差不多3月跑路了,这样的话,至少有5个以上的面试机会
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务