当前位置:网站首页>每日一题-正则表达式匹配-0715
每日一题-正则表达式匹配-0715
2022-08-05 05:17:00 【菜鸡程序媛】
题目:
给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘’ 的正则表达式匹配。
‘.’ 匹配任意单个字符
'’ 匹配零个或多个前面的那一个元素
所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。
解题思路:
通过递归的方式,从头开始走
当p的下一个字符是*号的时候,就开始发挥作用了,这个时候就会有两种情况:
第一种:当前两个字符串的字符是相等的,就可以走以下三种情况:(1)p字符串当前的字符是多余的,s不动,p往后面走两格;(2)都正常往后走一个格;(3)当前的p可能是少的,那就让当前的字符多用几次,j不动
第二种:当前的字符不想等,p就只能向后走两个格,当前p的字符和后面的️都起不到作用了判断当前两个字符串的字符是否相等,相等的话,都继续往后走
如果不相等,并且没有️可以利用的时候,那么p当中就有s字符串不存在的字符,即肯定不是完全包含的。
️:过程中有一些边界条件需要考虑,比如s已经走到了结束,但是p没有结束,就存在一种可能,p还剩下一个字符和一个️,可以当作0次处理,跳过当前的字符
代码:
class Solution {
public boolean isMatch(String s, String p) {
if(s == null || p == null)
return false;
return recur(s, 0, p, 0);
}
private boolean recur(String s, int i, String p, int j){
//两个字符串都到达了末尾,p尽到了职责
if(i == s.length() && j == p.length())
return true;
//p已经没有能用来匹配s的字符
if(i != s.length() && j == p.length())
return false;
if((j + 1 < p.length() && p.charAt(j + 1) == '*')){
if(i == s.length())
return recur(s, i, p, j + 2);
if((s.charAt(i) == p.charAt(j)) ||(s.charAt(i) != ' ' && p.charAt(j) == '.')){
//当前的字符是相等的
return recur(s, i+1, p, j + 2) || //️处理的就是前面的字符只出现一次
recur(s, i+1, p, j) || //p的字符不够用,可以继续使用
recur(s, i, p, j + 2); //p的字符多余,自己往后跳,s就当看不到哈哈哈
}else{
//当前的字符不相等,p只能跳过
return recur(s, i, p, j + 2);
}
}
if(i >= s.length())
return false;
if((s.charAt(i) == p.charAt(j)) ||(s.charAt(i) != ' ' && p.charAt(j) == '.'))
return recur(s, i + 1, p, j + 1);
return false;
}
}
边栏推荐
- 【论文阅读-表情捕捉】ExpNet: Landmark-Free, Deep, 3D Facial Expressions
- [Database and SQL study notes] 8. Views in SQL
- 【shell编程】第三章:函数
- [Pytorch study notes] 10. How to quickly create your own Dataset dataset object (inherit the Dataset class and override the corresponding method)
- 将一句话的单词进行倒置(C语言纯代码)
- LeetCode刷题之第74题
- MySQL主从复制—有手就能学会的MySQL集群搭建教程
- 栈区中越界可能造成的死循环可能
- 单变量线性回归
- 【ts】typescript高阶:分布式条件类型
猜你喜欢
![[Kaggle project actual combat record] Steps and ideas sharing of a picture classification project - taking leaf classification as an example (using Pytorch)](/img/7d/7f1301c30034f1c247d41f04c40244.png)
[Kaggle project actual combat record] Steps and ideas sharing of a picture classification project - taking leaf classification as an example (using Pytorch)

栈区中越界可能造成的死循环可能

LeetCode刷题之第55题

CVPR 2020 - 频谱正则化

C语言程序死循环问题解析——变量被修改

单变量线性回归

framebuffer应用编程及文字显示(1)

1004 成绩排名 (20 分)

CVPR2020 - 自校准卷积

【UiPath2022+C#】UiPath 练习和解决方案-变量、数据类型和控制流程
随机推荐
电子产品量产工具(1)- 显示系统实现
初识机器学习
HuiFer 带你读懂 BeanFactory getBean 方法
OSPF故障排除办法
《基于机器视觉的输电线路交叉点在线测量方法及技术方案》论文笔记
LeetCode刷题之第54题
The University of Göttingen proposed CLIPSeg, a model that can perform three segmentation tasks at the same time
LeetCode刷题之第23题
CH32V307 LwIP移植使用
1008 数组元素循环右移问题 (20 分)
LeetCode刷题之第701题
五、请求处理—Rest映射是怎样实现的?
framebuffer应用编程及文字显示(2)
浅谈遇到的小问题
AIDL detailed explanation
Facial Motion Capture 调研
电子产品量产工具(4)-UI系统实现
[Database and SQL study notes] 10. (T-SQL language) functions, stored procedures, triggers
C语言联合体union占用空间大小问题
LeetCode刷题之第530题