字符串正则匹配leetcode_JAVA 正则表达式

字符串正则匹配leetcode_JAVA 正则表达式原题链接给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。示例 1:输入:s = “aa” p = “a”输出:false解释:”a” 无法匹配 “aa” 整个字符串。示例 2:输入:s = “aa” p = “a*”输出:true解释:因为 ‘*’ 代表可以匹配零个或多个前面的那一个元素, 在这里前面的元素就是

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

原题链接
给你一个字符串 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
解释:".*" 表示可匹配零个或多个('*')任意字符('.')。
示例 4:

输入:s = "aab" p = "c*a*b"
输出:true
解释:因为 '*' 表示零个或多个,这里 'c' 为 0 个, 'a' 被重复一次。因此可以匹配字符串 "aab"。
示例 5:

输入:s = "mississippi" p = "mis*is*p*."
输出:false

提示:

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

题解

  1. 动态规划
    在这里插入图片描述
class Solution { 
   
    static const int N = 1e3 + 10;
public:
    bool isMatch(string s, string p) { 
   
        int n = s.size(),m = p.size();
        vector<vector<bool> >dp(n + 1,vector<bool> (m + 1));
        dp[0][0] = true;
        for(int i = 1;i <= m;i ++){ 
   
            if(p[i - 1] == '*' && ((i - 1) & 1))
            dp[0][i] = dp[0][i - 2];
        }
        for(int i = 1;i <= n;i ++){ 
   
            for(int j = 1;j <= m;j ++){ 
   
                if(p[j - 1] == '.' || p[j - 1] == s[i - 1])dp[i][j] = dp[i - 1][j - 1];
                else if(p[j - 1] == '*'){ 
   
                    dp[i][j] = dp[i][j - 2];
                    if(s[i - 1] == p[j - 2] || p[j - 2] == '.')dp[i][j] = dp[i][j] | dp[i - 1][j];
                }
            }
        }
        return dp[n][m];
    }
};
  1. dfs深搜
class Solution { 
   
public:
    bool isMatch(string s, string p) { 
   
        if(s.size() == 0 && p.size() == 0)return true;
        else if(s.size() != 0 && p.size() == 0)return false;
        else if(s.size() == 0 && p.size() != 0){ 
   
            //s为空的时候 p有可能出现a*.*b* 等带有*号的情况
            if(p.size() >= 2 && p[1] == '*' && isMatch(s,p.substr(2)))
                return true;
        }
        else{ 
   
            char a = s[0],b = p[0];
            //当有*的时候可以选择匹配一个或者多个
            if(p.size() >= 2 && p[1] == '*'){ 
   
                if(a == b || b == '.')return isMatch(s.substr(1),p) || isMatch(s,p.substr(2));
                else return isMatch(s,p.substr(2));
            }
            //但没*的时候只能一个一个匹配
            else if(a == b || b == '.')return isMatch(s.substr(1),p.substr(1));
        }
        return false;
    }
};
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168731.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mysql 修改字段类型

    mysql 修改字段类型mysql修改字段长度altertablenews modifycolumntitlevarchar(130);altertable表名modifycolumn字段名类型;如:news表里的title 字段原来长度是100个字符,现长度要改成130个字符mysql修改字段类型altertablenews mo

    2022年4月29日
    39
  • 二叉树的中序遍历非递归算法java_二叉树遍历例题解析

    二叉树的中序遍历非递归算法java_二叉树遍历例题解析*非递归算法思想:  (1)设置一个栈S存放所经过的根结点(指针)信息;初始化S; (2)第一次访问到根结点并不访问,而是入栈;  (3)中序遍历它的左子树,左子树遍历结束后,第二次遇到根结点,就将根结点(指针)退栈,并且访问根结点;然后中序遍历它的右子树。 (4)当需要退栈时,如果栈为空则结束。     代码实现:void…

    2025年11月17日
    3
  • ToF相机从Camera2 API中获取DEPTH16格式深度图[通俗易懂]

    ToF相机从Camera2 API中获取DEPTH16格式深度图[通俗易懂]ToF相机工作原理:ToF相机给目标连续发送光脉冲,然后用传感器接收从物体返回的光,通过探测光脉冲往回的飞行时间来得到目标距离。ToF相机可以同时得到整幅图像的深度(距离)信息。  深度图通常是灰度图,其中的每个值代表光反射表面和相机的距离。灰度图水平垂直坐标对应像素点位置,该位置的灰度值对应的是该像素距离摄像头的距离。所以深度图中的每个像素可以表示空间中一个点的三维坐标。如果光源被吸收或者未收到反射信号则呈现黑色。从Camera2API中获取DEPTH16格式的深度信息ImageFormat.DE

    2022年5月10日
    61
  • mysql解锁_mysql锁表如何解锁

    mysql解锁_mysql锁表如何解锁什么是MySQL锁表?为了给高并发情况下的mysql进行更好的优化,有必要了解一下mysql查询更新时的锁表机制。MySQL有三种锁的级别:页级、表级、行级。MyISAM和MEMORY存储引擎采用的是表级锁(table-levellocking);BDB存储引擎采用的是页面锁(page-levellocking),但也支持表级锁;InnoDB存储引擎既支持行级锁(row-levellockin…

    2022年6月3日
    31
  • python修改ip地址_怎么更改电脑ip地址?基于 Python 爬虫的ip修改设计与实现

    python修改ip地址_怎么更改电脑ip地址?基于 Python 爬虫的ip修改设计与实现怎么更改电脑ip地址?基于Python爬虫原理的篮球鞋选择程序的设计与实现ip修改【摘要】伴随着篮球鞋工艺的进步及产业升级,多类型多种类的篮球鞋出现在大众的视野当中。与此同时,消费者对篮球鞋的选择也逐渐增多。针对篮球爱好者在篮球鞋认知存在选择局限性、认知局限性等问题,针对于市面上关于篮球鞋选择程序的空白,也为了可以让球鞋爱好者选择合适的球鞋,本文笔者尝试通过利用Python爬虫,定向抓取…

    2022年6月20日
    35
  • pygame安装超详细讲解「建议收藏」

    pygame安装超详细讲解「建议收藏」1.进入python官网:https://www.python.org/2.点击PyPI3.输入框输入pygame4.根据顺序依次点击5.根据自己python版本号选择对应的文件6.把下载的whl文件放在python的对应目录下7.回到上一句目录,按住shift然后鼠标点击右键,打开windowsPowerShell命令窗口输入pygame_2048-1.9.4-py3-none-any.whl(这个是你下载的对应版本名)安装过程中出现了两个问题:1)Youareusin

    2022年5月24日
    53

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号