正则表达式匹配_正则表达式匹配字符串长度

正则表达式匹配_正则表达式匹配字符串长度题目描述请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意

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

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

题目描述

请实现一个函数用来匹配包括’.’和’*’的正则表达式。模式中的字符’.’表示任意一个字符,而’*’表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串”aaa”与模式”a.a”和”ab*ac*a”匹配,但是与”aa.a”和”ab*a”均不匹配
 
 
提交链接:
点击
 
 
思路:
分两种情况讨论
  
1.第2个字符不为*时
    1.1 当前主串字符和模式串字符匹配,那么主串和模式串指针相应往后移一位,接着递归进行匹配
          
(匹配有两种情况,一种是直接相等;另一种是模式串为.且主串不为空)
    1.2 当前主串字符和模式串字符不匹配,那么直接返回false
  2.第2个字符为*时
    2.1 当前主串字符和模式串字符匹配,那么分为三种情况:
      2.1.1 *取值为0,  主串指针不动,模式串指针+2
      2.1.2 *取值为1,  主串指针+1,模式串指针+2
      2.1.3 *取值为多,主串指针+1,模式串指针不动   
      (其中2.1.2可由 先2.1.3再2.1.1得到,因此下面代码红色阴影部分可不写,提升算法速度!)
    2.2 当前主串字符和模式串字符不匹配,那么就是*直接取值为0,模式串指针+2跟接下来的字符进行匹配,表示跳过此字符。
 
代码:
class Solution {
public:
    bool match(char* str, char* pattern)
    {
        if(str[0]=='\0' && pattern[0]=='\0'){
            return true;
        }else if(str[0]!='\0' && pattern[0] =='\0'){
            return false;
        } 
        if(pattern[1]!='*'){  //第2个字符不为*
            if(str[0]==pattern[0]||(pattern[0]=='.' && str[0]!='\0')){ //字符匹配
                return match(str+1,pattern+1);
            }else{ //字符不匹配
                return false;
            }
        }else{  //第2个字符为*
            if(str[0]==pattern[0]||(pattern[0]=='.' && str[0]!='\0')) //字符匹配
                return match(str,pattern+2) || match(str+1,pattern+2) || match(str+1,pattern);
            else
                return match(str,pattern+2);  //字符不匹配
        }
    }
};

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

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


相关推荐

  • iis由于权限不足无法读取配置文件_iis500内部服务器错误

    iis由于权限不足无法读取配置文件_iis500内部服务器错误Response对象错误’ASP0251:80004005’超过响应缓冲区限制此ASP页的执行造成响应缓冲区超过其配置限制。因为页面中数据较多,有上千条,导致出现“超过响应缓冲区限制。此ASP页的执行造成响应缓冲区超过其配置限制”。如果response.buffer=false这样设的话,可以查出,但是好慢。怎么解决?我们可以加大Buffer的缓冲区,办法是:先在服务里关闭i…

    2022年10月20日
  • 解决删除symantec,需要输入密码的问题

    解决删除symantec,需要输入密码的问题安装了symantec后,感觉系统满了好多,决定卸载了。在卸载是发现需要输入密码,从来没有设置过密码,也不知是要输那个密码。研究了一阵子,可以通过以下步骤来绕过输入密码问题。1.安全模式启动,在命令行中输入serviecs.msc打开服务管理器,找到Symantec相关的项,在启动选项里设为禁用。其实发现真正要禁用的Symantecendpointprotecion,启动项是灰的,根本禁用不了。只能找到C:/\ProgramFiles\Symantec\Symantecendp

    2022年6月1日
  • 小米手环app android,小米健康官方app[通俗易懂]

    小米健康官方app是一款基于手机传感器实现的,提供健康监测、分析、服务的应用https://woshiluren.lanzous.com/b00zcdbtg。保持每天随身携带手机,它就能分析你一天健康状态,并依据你的个人基础信息,自动定制健康目标,给予健康提示。目前只提供运动和睡眠相关的服务,后续我们还将推出更多维度的健康服务。应用特色目前只提供运动和睡眠相关的服务。保持每天随身携带手机,它就能分…

    2022年4月9日
  • vue双向绑定指令[通俗易懂]

    vue双向绑定指令[通俗易懂]vue双向绑定指令

    2022年9月14日
  • 淘宝自动抢购脚本「建议收藏」

    淘宝自动抢购脚本「建议收藏」淘宝自动抢购脚本抢购脚本是通过Selenium来完成自动登录,和自动点击的操作的。Selenium是一个用于Web应用程序测试的工具,Selenium可以直接运行在浏览器中,通过后台控制操作浏览器,完成购买操作。教程需要安装python环境,安装python环境可参考链接安装python完后记得配置环境和安装Pycharm编辑器(安装Pycharm可参考)一、安装Selenium库Selenium模块是Python的第三方库,可以通过pip进行安装:pip3installselen

    2022年4月29日
  • java中Bigdecimal加减乘除运算

    java中Bigdecimal加减乘除运算在java中的Bigdecimal类型的数据进行加减乘除运算的时候要调用以下方法:加法:add减法:subtract乘法:multiply除法:divide例如: BigDecimali=newBigDecimal(2);BigDecimalj=newBigDecimal(1);//加法System.out.println(i.add(j));//减法System.out.println(i.subtract(j));

    2022年6月2日

发表回复

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

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