※剑指offer系列41:正则表达式匹配

做这个题目一定要思路清晰,各种情况都要考虑完善。

分为两种情况

1.其中有一个到结尾了

2.两个都没结尾,这里以它的下一位是否为*作为判断条件。

 1 class Solution {
 2 public:
 3     bool match(char* str, char* pattern)
 4     {
 5         if (str == NULL || pattern == NULL)
 6             return false;
 7         return matchcore(str, pattern);
 8     }
 9     bool matchcore(char* str, char* pattern)
10     {
11         //第一种情况
12         if (*str == '\0'&&*pattern == '\0')
13             return true;
14         if (*str != '\0'&&*pattern == '\0')
15             return false;
16 
17         //第二种情况
18         if (*(pattern + 1) == '*')
19         {
20             if (*str == *pattern || (*str != '\0'&&*pattern == '.'))
21                 return matchcore(str + 1, pattern) ||//有n个不需要的数字需要用*消除
22                 matchcore(str, pattern + 2);//跳过这个数字和后面的星星,即出现0次
23             else
24                 return match(str, pattern + 2);//跳过这个数字和后面的星星,即出现0次
25 
26         }
27         if (*str == *pattern|| (*str != '\0'&&*pattern == '.'))//注意这里的条件语句
28                                                                                         //两个数相同和没有结尾的情况下模式出现'.'是一样的
29             return  matchcore(str + 1, pattern + 1);
30         return false;
31     }
32 };

 

posted @ 2019-07-24 17:40  妮妮熊  阅读(162)  评论(0编辑  收藏  举报