首页 > 其他分享 >[LeetCode]010-正则表达式匹配

[LeetCode]010-正则表达式匹配

时间:2022-12-21 20:45:50浏览次数:66  
标签:aa 字符 匹配 示例 正则表达式 零个 010 字符串 LeetCode

>>> 传送门

题目

给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。

  • '.' 匹配任意单个字符
  • '*' 匹配零个或多个前面的那一个元素

所谓匹配,是要涵盖 整个 字符串 s 的,而不是部分字符串。

示例

示例1

输入:s = "aa", p = "a"
输出:false
解释:"a" 无法匹配 "aa" 整个字符串。

示例2

输入:s = "aa", p = "a*"
输出:true
解释:因为 '*' 代表可以匹配零个或多个前面的那一个元素, 在这里前面的元素就是 'a'。因此,字符串 "aa" 可被视为 'a' 重复了一次。

示例3

输入:s = "ab", p = ".*"
输出:true
解释:".*" 表示可匹配零个或多个('*')任意字符('.')。

提示

  • 1 <= s.length <= 20
  • 1 <= p.length <= 30
  • s 只包含从 a-z 的小写字母。
  • p 只包含从 a-z 的小写字母,以及字符 . 和 *
  • 保证每次出现字符 * 时,前面都匹配到有效的字符

题解

class Solution {
public:
    bool isMatch(string s, string p) {
        int n = s.size(), m = p.size();
        vector<vector<bool>> f(n + 1, vector<bool>(m + 1));
        f[0][0] = true;
        s = ' ' + s, p = ' ' + p;

        // f[i][j]: s[0, i] match p[0, j]
        for (int i = 0; i <= n; i ++ ) {
            for (int j = 1; j <= m; j ++ ) {
                if (j + 1 <= m && p[j + 1] == '*') continue;
                if (i && p[j] != '*') {
                    f[i][j] = f[i - 1][j - 1] && (s[i] == p[j] || p[j] == '.');
                }
                else if (p[j] == '*') {
                    f[i][j] = f[i][j - 2] || i && f[i - 1][j] && (s[i] == p[j - 1] || p[j - 1] == '.');
                }
            }
        }
        return f[n][m];
    }
};

标签:aa,字符,匹配,示例,正则表达式,零个,010,字符串,LeetCode
From: https://www.cnblogs.com/yuyork/p/16997203.html

相关文章

  • #yyds干货盘点# LeetCode程序员面试金典:最小高度树
    题目:给定一个有序整数数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉搜索树。示例:给定有序数组:[-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],......
  • 正则表达式?!的理解
    上代码:      首先我们根据代码以及结果可以知晓,跟在“?!”后面的表达式表示的是“iamworkingnow”这一句,结果只保留了“有事晚点聊”,那么“?!”即......
  • LeetCode HOT 100:颜色分类(荷兰国旗问题)
    题目:75.颜色分类题目描述:给你一个数组,元素只为0、1、2,分别代表红色、白色和蓝色。将数组中相同颜色的元素移动到一起,并将它们排序。也就是将0都排在最前面,1排在中间,2排......
  • [leetcode]第 5 天 查找算法(中等)
    04.二维数组中的查找思路直接遍历!两个for循环classSolution{publicbooleanfindNumberIn2DArray(int[][]matrix,inttarget){for(int[]row:mat......
  • LeetCode刷题笔记
    目录AlgorithmNote基础数组链表哈希表字符串栈与队列二叉树参考链接:代码随想录AlgorithmNote基础数组67:Sqrt-X二分查找法:x平方根的整数部分是ans是满足\(k^2......
  • #yyds干货盘点# LeetCode程序员面试金典:节点间通路
    题目:节点间通路。给定有向图,设计一个算法,找出两个节点之间是否存在一条路径。示例1:输入:n=3,graph=[[0,1],[0,2],[1,2],[1,2]],start=0,target=2输出:tr......
  • 藏在正则表达式里的陷阱
    一个正则表达式竟然能导致CPU100%异常?快来看看是怎么回事!博主个人独立站点开通啦!欢迎点击访问:​​https://shuyi.tech​​前几天线上一个项目监控......
  • [LeetCode]009-回文数
    >>>传送门题目给你一个整数x,如果x是一个回文整数,返回true;否则,返回false。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121是回文,而123不......
  • leetcode-整数反转
    给你一个32位的有符号整数x,返回将x中的数字部分反转后的结果。如果反转后整数超过32位的有符号整数的范围 [−231, 231 −1],就返回0。假设环境不允许存储64......
  • Industrial wifi6 router/wifi6-Qualcomm-IPQ6010/IPQ6018-Wallys
    MT7915/IPQ6000/IPQ6018/IPQ6010/IPQ4019/IPQ4029/IPQ5018/IPQ8072/IPQ8072A/IPQ8074/IPQ8074A/QCN6024/QCN9074/QCN9072/QCN9024/IPQ4018/IPQ4028/AR9223/QCA9880/QCA9882/......