当前位置:网站首页>每日一题-正则表达式匹配-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;
}
}
边栏推荐
猜你喜欢
电子产品量产工具(3)- 文字系统实现
Machine Learning (1) - Machine Learning Fundamentals
[Pytorch study notes] 9. How to evaluate the classification results of the classifier - using confusion matrix, F1-score, ROC curve, PR curve, etc. (taking Softmax binary classification as an example)
【shell编程】第三章:函数
LeetCode刷题之第54题
手把手教你搭建小程序
Comparison and summary of Tensorflow2 and Pytorch in terms of basic operations of tensor Tensor
Redis设计与实现(第三部分):多机数据库的实现
SQL(1) - Add, delete, modify and search
【UiPath2022+C#】UiPath If条件语句
随机推荐
CVPR 2022 | 70% memory savings, 2x faster training
【论文阅读-表情捕捉】ExpNet: Landmark-Free, Deep, 3D Facial Expressions
四、Web场景之静态资源配置原理
LeetCode刷题之第54题
网络信息安全运营方法论 (下)
Redis设计与实现(第一部分):数据结构与对象
You should write like this
读论文 - Unpaired Portrait Drawing Generation via Asymmetric Cycle Mapping
LeetCode刷题之第86题
单片机按键开发库-支持连击、长按等操作
基于STM32F4的FFT+测频率幅值相位差,波形显示,示波器,时域频域分析相关工程
CH32V307 LwIP移植使用
【论文阅读-表情捕捉】High-quality Real Time Facial Capture Based on Single Camera
ECCV2022 | RU & Google propose zero-shot object detection with CLIP!
【ts】typescript高阶:typeof使用
常见的 PoE 错误和解决方案
链表章6道easy总结(leetcode)
十、视图解析原理与源码分析
C语言—扫雷的实现
The University of Göttingen proposed CLIPSeg, a model that can perform three segmentation tasks at the same time