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

剑指 Offer 19. 正则表达式匹配

时间:2023-04-08 18:35:12浏览次数:57  
标签:匹配 Offer 19 复杂度 正则表达式 int

题目链接:剑指 Offer 19. 正则表达式匹配

方法:动态规划

解题思路

详情见:逐行详细讲解,由浅入深,dp和递归两种思路

代码

class Solution {
public:
    bool isMatch(string s, string p) {
        int n = s.size(), m = p.size();
        bool f[n + 1][m + 1]; // f[i][j] 代表s的前i个和B的前j个能否匹配
        memset(f, false, sizeof(f));
        for (int i = 0; i <= n; i ++ ) {
            for (int j = 0; j <= m; j ++ ) {
                if (j == 0) {
                    f[i][j] = i == 0;
                } else {
                    if (p[j - 1] != '*') {
                        if (i > 0 && (s[i - 1] == p[j - 1] || p[j - 1] == '.')) {
                            f[i][j] = f[i - 1][j - 1];
                        }
                    } else {
                        if (j >= 2) {
                            f[i][j] |= f[i][j - 2];
                        }
                        if (i >= 1 & j >= 2 && (s[i - 1] == p[j - 2] || p[j - 2] == '.')) {
                            f[i][j] |= f[i - 1][j];
                        }
                    }
                }
            }
        }
        return f[n][m];
    }
};

复杂度分析

时间复杂度:\(O(nm)\);
空间复杂度:\(O(nm)\)。

标签:匹配,Offer,19,复杂度,正则表达式,int
From: https://www.cnblogs.com/lxycoding/p/17298966.html

相关文章

  • JavaScript 中使用正则表达式的方法
    目录使用方法常见的使用方法test()exec()match()replace()split()使用方法在JavaScript中,正则表达式可以用字面量语法创建。字面量语法是一种非常简单直观的表示正则表达式的方式。它使用两个斜杠(/)括起来,如下所示:constregex=/pattern/;例如,要匹配字母a和b之间的所有字......
  • Leetcode(剑指offer专项训练)——DFS/BFS专项(1)
    计算除法题目给定一个变量对数组equations和一个实数值数组values作为已知条件,其中equations[i]=[Ai,Bi]和values[i]共同表示等式Ai/Bi=values[i]。每个Ai或Bi是一个表示单个变量的字符串。另有一些以数组queries表示的问题,其中queries[j]=[Cj,Dj]......
  • 判断字符串是不是正则表达式
    :rules="[{required:true,trigger:'blur',validator:this.checkCanonical},]"checkCanonical(rule,value,callback){if(value){letisReg=truetry{isReg=eval(......
  • 剑指offer66(Java)-构建乘积数组(中等)
    题目:给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中 B[i]的值是数组A中除了下标i以外的元素的积,即 B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1]。不能使用除法。 示例:输入:[1,2,3,4,5]输出:[120,60,40,30,24] 提示:所有元素乘积之和不会......
  • AP9193 大功率升降压恒流驱动 3.6-100V LED理疗灯 LED灯串 恒流控制器
    AP9193是一款高效率、高精度的升压型大功率LED灯恒流驱动控制芯片。AP9193内置高精度误差放大器,固定关断时间控制电路,恒流驱动电路等,特别适合大功率、多个高亮度LED灯的串恒流驱动。AP9193采用固定关断时间的控制方式,其工作频率最高可达1MHz,可使外部电感和滤波电容......
  • 剑指offer03(Java)-数组中重复的数字(简单)
    题目:找出数组中重复的数字。在一个长度为n的数组nums里的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例1:输入:[2,3,1,0,2,5,3]输出:2或3 限制:2<=n<=1000......
  • buuctf.pwn.[OGeek2019]babyrop
    可以看出,没有开什么特别的保护什么是plt,gpt,自己回顾一下hex(elf.plt['puts']).plt.got:08048548FF25D49F0408jmpds:puts_ptrhex(elf.got['puts']).got:08049FD46CA00408puts_ptrddoffset__imp_puts;DATAXREF:pu......
  • 特别数的和-191
    小明对数位中含有2、0、1、9的数字很感兴趣(不包括前导0),在1到40中这样的数包括1、2、9、10至32、39和40,共28个,他们的和是574。请问,在1到 n 中,所有这样的数的和是多少?输入一行包含一个整数 (1≤n≤10^4)。1importjava.util.Scanner;23publicclasst......
  • 剑指 Offer 16. 数值的整数次方
    题解链接:剑指Offer16.数值的整数次方方法一:迭代实现快速幂解题思路通过迭代的方法,自下向上实现快速幂求解过程,初始化结果\(res=1\),底数\(t=x\),幂次为\(n\)。当\(n\)为奇数时,\(res=res*t\),先乘上一个\(t\),此时还有\(n-1\)个\(t\)相乘,即相当于计算\((t*......
  • 剑指 Offer 15. 二进制中1的个数
    题目链接:剑指Offer15.二进制中1的个数方法一:位运算解题思路x=n&-n,\(x\)表示\(n\)的最后一位\(1\)所对应的值,每减去一次\(x\),相当于有一个\(1\),\(res++\)。代码classSolution{public:inthammingWeight(uint32_tn){intres=0;w......