当前位置: 首页 > 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三种状态分别代表未判断、不是交错字符串、是交错字符串,之前也用到过这种做法,可以降低复杂度。

相关文章:

  • 基于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
  • 计算机网络-服务器模型
  • 广州企业网站建设/武汉网站seo推广公司
  • 基因网站开发/志鸿优化设计
  • 2017招远网站建设/太原关键词优化报价
  • 品牌网站建设设计/黑帽seo排名优化
  • 宁波电商平台网站建设/定制营销型网站建设
  • 长春 做网站多少钱/首页关键词排名优化