首页 > 其他分享 >剑指 Offer 19. 正则表达式匹配(困难)

剑指 Offer 19. 正则表达式匹配(困难)

时间:2023-08-28 23:12:18浏览次数:89  
标签:Offer 19 ze biao 正则表达式 int dp size

题目:

class Solution {
public:
    bool isMatch(string s, string p) {
        int m = s.size()+1, n = p.size()+1;
        vector<vector<bool>> dp(m, vector<bool>(n, false));      //设动态规划矩阵 dp , dp[i][j] 代表字符串 s 的前 i 个字
        dp[0][0] = true;                                         //符和 p 的前 j 个字符能否匹配
        for(int j=2;j<n;j+=2){      //由于dp[0][0]代表的是空字符的状态,因此dp[i][j]对应的添加字符是s[i - 1]和p[j - 1]
            dp[0][j] = dp[0][j-2]&&p[j-1]=='*';      //只要初始化首行:s为空,p的偶数个为'*'时就匹配。首列一定不匹配。
        }
        for(int i=1;i<m;i++){
            for(int j=1;j<n;j++){
                if(p[j-1]=='*'){
                    if(dp[i][j-2]) dp[i][j] = true;      // aaa|   aaa|b*
                    else if(dp[i-1][j]&&p[j-2]==s[i-1]) dp[i][j] = true;      // aaa|a   aa*|
                    else if(dp[i-1][j]&&p[j-2]=='.') dp[i][j] = true;      // aaa|a   a.*|
                }
                else{
                    if(dp[i-1][j-1]&&p[j-1]==s[i-1]) dp[i][j] = true;      // aa|b   aa|b
                    if(dp[i-1][j-1]&&p[j-1]=='.') dp[i][j] = true;      // aa|b   aa|.
                }
            }
        }
        return dp[m-1][n-1];
    }
};

作者:Krahets
链接:https://leetcode.cn/problems/zheng-ze-biao-da-shi-pi-pei-lcof/solutions/494128/jian-zhi-offer-19-zheng-ze-biao-da-shi-pi-pei-dong/
来源:力扣(LeetCode)

标签:Offer,19,ze,biao,正则表达式,int,dp,size
From: https://www.cnblogs.com/fly-smart/p/17663640.html

相关文章

  • 正则表达式判断号码靓号类型
    正则表达式判断号码靓号类型战国墨竹于 2018-04-2010:38:35 发布6962 收藏 14分类专栏: php 正则 php同时被2个专栏收录95篇文章0订阅订阅专栏正则3篇文章0订阅订阅专栏靓号检测:主要可以检测连号(正连12345、倒连65432)、AABB号、手......
  • 剑指 Offer 10- II. 青蛙跳台阶问题(简单)
    题目:classSolution{public:intnumWays(intn){vector<int>dp(n+1,1);for(inti=2;i<=n;i++){dp[i]=(dp[i-1]+dp[i-2])%1000000007;}returndp[n];}};......
  • 剑指Offer 33. 二叉搜索树的后序遍历序列
    题目链接:剑指Offer33.二叉搜索树的后序遍历序列题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。解法思路:既然是二叉搜索树,那就一定满足以下性质:左子树<根<右子树;......
  • 230719校内赛
    T1usaco20febEquilateralTrianglesP题面我就不描述了题解首先我们是不可能暴力计算每一对点距离的我们可以想一想如何将斜着的数个点转换为横着或竖着的数个点,这样会使我们的计算方便许多不难想到的是切比雪夫距离,当然考场上也容易推出这玩意(我就是考场现推的)然后就是如......
  • 19.Linux中write函数详解
    19.Linux中write函数详解头文件:#include<unistd.h>函数原型:write(intfd,constvoid*buf,size_tcount);函数说明:write()会把参数buf所指的内存写入count个字节到参数fd所指的文件内。返回值:如果顺利write()会返回实际写入的字节数(len)。当有错误发生时则返回-1,错......
  • BUUCTF [强网杯 2019]随便注
    判断传参方式,输入1'or1=1,URL传参,所以是get。报错error1064:YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMariaDBserverversionfortherightsyntaxtousenear'''atline1报错说明后端参数后面有可能存在其他sql语句,我们......
  • 19 JavaScript的hook
    19JavaScript的hook什么叫hook?Hook技术又叫钩子函数,在系统没有调用该函数之前,钩子程序就捕获该消息,钩子函数先得到该函数的控制权,这时钩子函数既可以改变该函数的执行行为,还可以强制结束消息的传递,简单来说。就是把系统的程序拉出来,来变成我们自己执行的片段。我们可以控制执行......
  • Parallels Desktop 19 for Mac 发布, 简化 macOS 和 Windows 交互
    ParallelsDesktop19forMac发布,简化macOS和Windows交互ParallelsDesktop19BusinessEdition请访问原文链接:https://sysin.org/blog/parallels-desktop-19/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgAugust21,2023Mac爱好者大家好,这是多么令......
  • vs2019-cuda配置入门
    cuda使用如下1、打开VS,新建C++空项目 2、右击源文件->添加->新建项 3、选择CUDAC/C++File,名称位main.cu 4、把下面的示例源码复制到main.cu中#include"cuda_runtime.h"#include"device_launch_parameters.h"#include<stdio.h>/***************************......
  • 【CF1519D】Maximum Sum of Products
    #include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;lln,a[5000+10],b[5000+10],abpre[5000+10],absuf[5000+10],ans;intmain(){ cin>>n; for(lli=1;i<=n;i++)cin>>a[i]; for(lli=1;i<=n;i++)cin>>b[i]; for(......