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

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

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Traits技法[终于解决]

    扮演“特性萃取机”角色,萃取各个迭代器的特性(迭代器的相应类型)模板特例化:提供一份template定义式,而其本身仍为templatization通过classtemplatepartial

    2021年12月18日
    46
  • maven中net.sf.json报错

    maven中net.sf.json报错今天需要JSONObject,因此需要引入net.sf.json.包,于是去Maven上面找<!– https://mvnrepository.com/artifact/net.sf.json-lib/json-lib –><dependency> <groupId>net.sf.json-lib</groupId> &l…

    2022年6月13日
    47
  • python matplotlib 画图保存图片简单例子[通俗易懂]

    python matplotlib 画图保存图片简单例子[通俗易懂]保存的时候遇到过保存空白图像的问题,是因为将plt.savefig(‘./test2.jpg’)放到了plt.show()之后,只要先保存在显示就可以正常保存了。importnumpyasnpimportmatplotlib.pyplotaspltt=np.arange(0,69,1)plt.plot(t,t,’r’,t,t**2,’b’)label=…

    2022年5月3日
    125
  • JavaHTTP下载视频

    JavaHTTP下载视频

    2022年1月14日
    40
  • google earth无法连接到服务器_怎么做才能保护地球

    google earth无法连接到服务器_怎么做才能保护地球近期Google地球、GoogleEarth、谷歌地球pro版本启动后提示无法连接到登录服务器或者启动后黑屏,可能是DNS污染、IP屏蔽、协议问题或者网络问题,以下介绍三种方法解决。先说结果:第一种修改host文件方法可能行不通,后续也要更新hosts文件,连接可能不稳定;第二种方法是使用免费加速器,可彻底解决此问题;第三种方法就是使用替代的国产软件,如图新地球、奥维地球等。

    2022年9月19日
    2
  • 安装Chrome驱动[通俗易懂]

    安装Chrome驱动[通俗易懂]相信许多小伙伴在学习selenium时候遇到驱动器无法运行的错误,就跟我一样,所以写一篇博客讲一讲如何安装这就是谷歌浏览器驱动没有安装成功而产生的报错。下面我给大家简单说说如何安装谷歌驱动器。Windows系统1.下载谷歌浏览器可以参考以下链接https://www.google.cn/intl/zh-CN/chrome然后检测自己的版本2.下载对应的Chrome驱动参考以下的链接http://npm.taobao.org/mirrors/chromedriver/应该可以看到以下

    2022年6月29日
    29

发表回复

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

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