正则表达式匹配_正则表达式匹配字符串长度
正则表达式 字符串 长度 匹配
2023-06-13 09:12:57 时间
大家好,又见面了,我是你们的朋友全栈君。
题目描述
请实现一个函数用来匹配包括’.’和’*’的正则表达式。模式中的字符’.’表示任意一个字符,而’*’表示它前面的字符可以出现任意次(包含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.cn/167492.html原文链接:https://javaforall.cn
相关文章
- EditPlus正则表达式替换字符串详解
- 正则表达式替换某个字符「建议收藏」
- 【说站】Python正则表达式字符串的组成
- jmeter正则表达式提取器的用法和正则「建议收藏」
- 正则表达式基础(2)
- js正则表达式语法
- MySql基础-笔记7 -正则表达式
- SQL开发知识:Oracle正则表达式分割字符串 REGEXP_SUBSTR的代码
- Mysql实现模糊查询的两种方式(like子句 、正则表达式)
- Java正则表达式验证格式 手机、邮箱、字符串详解编程语言
- JS正则表达式从入门到入土(4)—— 预定义类与边界详解编程语言
- JS test()方法:检测一个字符串是否匹配某个正则表达式
- Oracle使用正则表达式进行字符串替换(oracle 替换 正则)
- Oracle中使用正则表达式实现字符串分割(oracle中正则分割)
- VBscript的正则表达式字符串匹配
- 正则表达式口诀学习正则的朋友看看
- Java/Js下使用正则表达式匹配嵌套Html标签
- PHP中用正则表达式清除字符串的空白
- php正则表达式的子模式详解
- javascript中使用正则表达式实现删除字符串中的前后空格
- grep用法详解grep与正则表达式
- jsreplace正则表达式应用案例讲解
- JS正则表达式获取字符串中特定字符的方法
- php中常见的sql攻击正则表达式汇总
- PHP中一些可以替代正则表达式函数的字符串操作函数