当前位置: 首页 > news >正文

leetcode日记(84)交错字符串

很明显的动态规划,就是怎么用想了一段时间。(开始还怀疑过是不是双指针,发现不行,因为会出现s3的下一个字符同时能够匹配到两个字符串字符的情况)

然后就是构建数组dp[101][101],数组代表前x个s1字符和前y个s2字符是否与前x+y个s3是交错字符串。

不断递归就行了:

class Solution {
public:
    string s1,s2,s3;
    int dp[101][101];
    bool dg(int x,int y){
        if(s1.size()==x&&s2.size()==y){
            dp[x][y]=1;
            return 1;
        }
        if(dp[x][y]!=-1) return dp[x][y]==1;
        bool b=0;
        if(s1.size()>x&&s1[x]==s3[x+y]){
            b=b|dg(x+1,y);
        }
        if(s2.size()>y&&s2[y]==s3[x+y]){
            b=b|dg(x,y+1);
        }
        dp[x][y]=b;
        return b;
    }
    bool isInterleave(string s1, string s2, string s3) {
        if(s1.size()+s2.size()!=s3.size()) return 0;
        this->s1=s1;
        this->s2=s2;
        this->s3=s3;
        memset(dp,-1,sizeof(dp));
        dg(0,0);
        return dp[s1.size()][s2.size()]==1;
    }
};

学到了一点东西就是可以用-1、0、1三种状态分别代表未判断、不是交错字符串、是交错字符串,之前也用到过这种做法,可以降低复杂度。

http://www.dtcms.com/a/56032.html

相关文章:

  • 基于STM32的简易出租车计费设计(Proteus仿真+程序+设计报告+原理图PCB+讲解视频)
  • 计算机组成原理笔记(一)——1.1电子计算机与存储程序控制
  • flask-定时任务
  • AMBA 总线及AXI协议介绍
  • 【计网】运输层
  • 【PSIM】峰值电流如何用D类触发器
  • 浅说图论基础
  • 数据库【MySQL安装配置篇(保姆级教程)】
  • 【go】以Kubernetes中的 kubelet 为引思考go语言中共享状态的选择
  • LeetCode 解题思路 12(Hot 100)
  • 使用ffmpeg读取mp4文件解码失败
  • 如何记录日常笔记
  • Django 中的算法应用与实现
  • LeetCode - 神经网络的 反向传播(Sigmoid + MSE) 教程
  • 玩转python: 掌握Python数据结构之链表
  • 安当全栈式金仓数据库安全解决方案:透明加密、动态凭据与勒索防护一体化实践
  • 【免费】2000.1-2021.9上市公司仲裁数据
  • TypeError: Cannot set properties of undefined (setting ‘xxx‘)
  • c++快速入门-2
  • 计算机网络-服务器模型
  • labelimg标注的xml标签转换为yolo格式标签
  • TMS320F28P550SJ9学习笔记4:导入其余包文件
  • 若依ry-vue分离板(完整版)前后端部署
  • AI革命先锋:DeepSeek与蓝耘通义万相2.1的无缝融合引领行业智能化变革
  • 元宇宙崛起:区块链与金融科技共绘数字新世界
  • RuleOS:DApp开发的“破局者”,区块链创新的“加速器
  • 从零开始的远程服务器跑深度学习(一)
  • 【基础1】冒泡排序
  • ERNIE 3.0: 大规模知识增强的预训练语言理解和生成框架
  • 【Minio】Docker部署Minio + 使用nginx配置https访问