【剑指offer52 正则表达式的匹配】
题目描述
请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配
题意:
. 是万能的
*可以代表前面的字符出现0次或者n次
class Solution { public: bool match(char* str, char* pattern) { //两个都为空 返回true if (*str == '\0' && *pattern == '\0') return true; //str不空 pattern空 这种情况必false if (*str != '\0' && *pattern == '\0') return false; //考虑pattern中下一个是不是* if (*(pattern+1) != '*') {//不是*的情况很简单 //两种情况匹配成功:1.要么字符相同 2.要么pattern此时是万能的“.” if (*str == *pattern || (*str != '\0' && *pattern == '.')) return match(str+1, pattern+1); else return false; } //如果pattern下一个是* 那分此字符是0个还是多个 else { //两种情况匹配成功:1.要么字符相同 2.要么pattern此时是万能的“.” if (*str == *pattern || (*str != '\0' && *pattern == '.')) //考虑只用一次 用多次 return match(str, pattern+2) || match(str+1, pattern); else //字符不匹配 取0 跳过 return match(str, pattern+2); } } };