LintCode_154 Regular Expression Matching

来源:互联网 发布:丁丁装修软件 编辑:程序博客网 时间:2024/06/11 16:31

Implement regular expression matching with support for '.' and '*'.

'.' Matches any single character.'*' Matches zero or more of the preceding element.The matching should cover the entire input string (not partial).The function prototype should be:bool isMatch(const char *s, const char *p)
Example
isMatch("aa","a") → falseisMatch("aa","aa") → trueisMatch("aaa","aa") → falseisMatch("aa", "a*") → trueisMatch("aa", ".*") → trueisMatch("ab", ".*") → trueisMatch("aab", "c*a*b") → true

思路是使用dp的方法, 如果下一个不是*,都好办。如果下一个是*, 就要考虑下重复几次的情况:


class Solution {public:    /**     * @param s: A string      * @param p: A string includes "." and "*"     * @return: A boolean     */    bool isMatch(const char *s, const char *p) {        // write your code here        if( 0 == *p) return 0 == *s;            if(*(p+1) != '*')          {              if(*p == *s || (*p) == '.' && (*s) != 0)              {                  return isMatch(s+1, p+1);              }              return false;          }          else          {              while(*p == *s || ((*p) == '.' && (*s) != 0))              {                  if(isMatch(s, p + 2))                  {                      return true;                  }                  s++;              }              return isMatch(s, p + 2);            }      }};





0 0
原创粉丝点击