正则表达式匹配(递归)

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

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;
	}
};
发布了212 篇原创文章 · 获赞 4 · 访问量 8791

猜你喜欢

转载自blog.csdn.net/ShenHang_/article/details/104705784