概述
题目描述
请实现一个函数用来匹配包括’.’和’‘的正则表达式。模式中的字符’.’表示任意一个字符,而’‘表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串”aaa”与模式”a.a”和”ab*ac*a”匹配,但是与”aa.a”和”ab*a”均不匹配
思路:用两个指针分别指向字符串和匹配串
如果能够匹配指针后移
不能匹配的情况比较复杂 要考虑有没有*号
总的来说就是用一个while循环一直匹配
然后把特殊的一些情况加入到里面就可以了
class Solution {
public:
bool match(char* str, char* pattern)
{
string s=str;
string p=pattern;
int i=0,j=0;
while(i<s.length()&&j<p.length()){
if(s[i]==p[j]){
if(p[j+1]=='*'&&match(str+i,pattern+j+2)){
return true;
}
i++;
j++;
continue;
}else if(i<s.length()&&j<p.length()&&p[j]=='.'){
if(p[j+1]=='*'&&match(str+i,pattern+j+2)){
return true;
}
i++;
j++;
continue;
}else if(i<s.length()&&j<p.length()&&p[j]=='*'){
j--;
while(i<s.length()&&(s[i]==p[j]||p[j]=='.')){
if(match(str+i,pattern+j+2)){
break;
}
i++;
}
j+=2;
continue;
}else if(i<s.length()&&j<p.length()-1&&p[j+1]=='*'){
j+=2;
continue;
}
return false;
}
if(i<s.length()){
return false;
}
while(j<p.length()){
if(p[j]=='*'){
j++;
continue;
}else if(p[j+1]=='*'){
j=j+2;
}else{
return false;
}
}
return true;
}
};
最后
以上就是温柔汽车为你收集整理的正则表达式匹配的全部内容,希望文章能够帮你解决正则表达式匹配所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复