当前位置:网站首页>每日一题-正则表达式匹配-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;
}
}
边栏推荐
猜你喜欢
Leetcode刷题——对链表进行插入排序
八、请求处理之自定义类型参数绑定原理
Jupyter notebook选择不同的Anaconda环境作为内核运行
用GAN的方法来进行图片匹配!休斯顿大学提出用于文本图像匹配的对抗表示学习,消除模态差异!
[Pytorch study notes] 11. Take a subset of the Dataset and shuffle the order of the Dataset (using Subset, random_split)
PoE视频监控解决方案
多边形等分
如何组织一场安全、可靠、高效的网络实战攻防演习?
1008 数组元素循环右移问题 (20 分)
网络信息安全运营方法论 (中)
随机推荐
PoE视频监控解决方案
「实用」运维新手一定不能错过的17 个技巧
四、Web场景之静态资源配置原理
CVPR2021 - Inception Convolution with Efficient Dilation Search
如何组织一场安全、可靠、高效的网络实战攻防演习?
LeetCode刷题之第55题
Leetcode刷题——对链表进行插入排序
LeetCode刷题之第74题
PID详解
八、请求处理之自定义类型参数绑定原理
网络ID,广播地址,掩码位数计算
【ts】typescript高阶:条件类型与infer
一个小时教你如何掌握ts基础
[Kaggle project actual combat record] Steps and ideas sharing of a picture classification project - taking leaf classification as an example (using Pytorch)
【UiPath2022+C#】UiPath数据类型
《基于机器视觉测量系统的工业在线检测研究》论文笔记
[Pytorch study notes] 11. Take a subset of the Dataset and shuffle the order of the Dataset (using Subset, random_split)
ECCV2022 | RU & Google propose zero-shot object detection with CLIP!
[Database and SQL study notes] 10. (T-SQL language) functions, stored procedures, triggers
【ts】typescript高阶:typeof使用