剣指offer(C++)--正規表現マッチング

1815 ワード

タイトル
             '.' '*'      。      '.'        ,
 '*'               (  0 )。     ,         
         。  ,   "aaa"   "a.a" "ab*ac*a"  ,   "aa.a"
 "ab*a"    
  ,      :
     1>        ,  true
     2>         ,         ,  false(    ,   
             ,           ,        ,       
          ,         “a*a*a*a*”,  ‘*’         0 ,
                 )
            ,       :         。    pattern
        ‘*’,            :pattern      ‘*’ 
  ‘*’:
      1>pattern       ‘*’:        ,        。  
            ,       ;      ,    false。     
        “    ”,            ,      ,  pattern 
             ‘.’,  str       ‘\0’。
      2>pattern      ‘*’ ,      ,  ‘*’    0    。
                   :
           a> ‘*’  0    ,str      ,pattern        ,
                ‘*’  ;
           b> ‘*’  1     ,str         ,pattern    
              。(    1            ,  :      ,
              str        , pattern    ,         a;
                      ,    str            )
           。
class Solution {
public:
    bool match(char* str, char* pattern)
    {
    if(str[0]=='\0' && pattern[0]=='\0')
            return true;
        if(str[0]!='\0' && pattern[0]=='\0')
            return false;
        if(pattern[1]=='*'){
            if(pattern[0]==str[0]||(pattern[0]=='.'&&str[0]!='\0'))
                return match(str+1,pattern) || match(str,pattern+2);
            else
                return match(str,pattern+2);
        }
        if(str[0]==pattern[0]||(pattern[0]=='.'&& str[0]!='\0'))
            return match(str+1,pattern+1);
        return false;
    }
};