Leetcode 之Regular Expression Matching(31)

Posted 牧马人夏峥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于Leetcode 之Regular Expression Matching(31)的主要内容,如果未能解决你的问题,请参考以下文章

Regular Express正则表达式基础

LeetCode 10. Regular Expression Matching

leetcode 10 Regular Expression Matching

[LeetCode] Regular Expression Matching

Leetcode 10. Regular Expression Matching

LeetCode——010 Regular Expression Matching