前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >正则表达式匹配_正则表达式匹配字符串长度

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

作者头像
全栈程序员站长
发布2022-09-19 22:34:00
1.9K0
发布2022-09-19 22:34:00
举报

大家好,又见面了,我是你们的朋友全栈君。

题目描述

请实现一个函数用来匹配包括’.’和’*’的正则表达式。模式中的字符’.’表示任意一个字符,而’*’表示它前面的字符可以出现任意次(包含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跟接下来的字符进行匹配,表示跳过此字符。

代码:

代码语言:javascript
复制
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.cn/167492.html原文链接:https://javaforall.cn

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com