Leetcode 之Regular Expression Matching(31)

正则表达式的匹配,还是挺难的。可根据下一个字符是不是*分为两种情况处理,需要考虑多种情况。

bool isMatch(const char *s, const char *p)
      {
          if (*p == '\0')return *s == '\0';

          //如果下一个不是*(*可表示前一个字符的数量)
          //要么当前字符匹配,要么是.,不可跳过
          if (*(p + 1) != '*')
          {
              if (*s == *p || (*p == '.' && *s != '\0'))
                  return isMatch(s + 1, p + 1);
              else
                  return false;
          }
          else
          {
              //如果是*,则当前字符匹配|| 有一个为.
              //因为后面是*,即使不完全匹配也没关系,跳过即可
              while (*p == *s || (*p == '.' && *s != '\0'))
              {
                  if (isMatch(s, p + 2))
                      return true;
                  s++;
              }
              return isMatch(s, p + 2);
          }
      }
View Code

 

posted @ 2016-05-24 16:20  牧马人夏峥  阅读(135)  评论(0编辑  收藏  举报