正则表达式匹配(递归)

在这里插入图片描述
在这里插入图片描述

class Solution {
public:
	bool isMatch(string s, string p) {
		//如果正则串p为空且字符串s也为空则匹配成功,如果正则串p为空但是s不为空则说明匹配失败
		if (p.empty())return s.empty();
		//判断s和p的首字符是否匹配,注意要先判断s不为空(因为能执行下面这句话本身就说明p不为空了)
		bool headMatched = !s.empty() && (s[0] == p[0] || p[0] == '.');
		if (p.length() >= 2 && p[1] == '*')
		{
			//如果p的第一个元素的下一个元素是*,则分别对两种情况进行判断
			return isMatch(s, p.substr(2)) || (headMatched&&isMatch(s.substr(1), p));
		}
		else if (headMatched)
		{
			//否则,如果s和p的首字符相等,则s和p同时后移一位继续判断
			return isMatch(s.substr(1), p.substr(1));
		}
		else
			return false;
	}
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值