题目

正则表达式的匹配,'.'能匹配任何一个字符,'*'之前必须有一个字符,两个结合起来表示之前那个字符出现0到无穷次。

 

解法

一定要注意'*'必须结合前面的字符一起使用。

 

代码

 1 class Solution {
 2 public:
 3     bool isMatch(const char *s, const char *p) {
 4         if(s == NULL || p == NULL)
 5             return false;
 6         if(*p == '\0')
 7             return *s == '\0';
 8             
 9         if(*(p+1) != '*')  //如果模式串的下一位不是'*',则判断当前字符
10             if(*s == *p || (*p == '.' && *s != '\0'))  //相等,或模式串碰到万能的'.',则继续往后匹配
11                 return isMatch(s+1, p+1);
12             else
13                 return false;
14         
15         while(*s == *p || (*p == '.' && *s != '\0'))  //模式串的下一位是'*',如果当前字符相同或模式串是万能的'.'
16         {
17             if(isMatch(s, p+2))  //模式串的'*'表示出现0次时的结果
18                 return true;
19             ++s;  //s前进1,表示'*'多匹配了一个
20         }
21         
22         return isMatch(s, p+2);  //'*'不匹配,跳过这个模式
23     }
24 };

 

相关文章:

  • 2022-01-14
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-10-18
猜你喜欢
  • 2021-07-25
  • 2021-12-07
  • 2021-11-03
  • 2022-01-17
  • 2022-12-23
相关资源
相似解决方案