Implement regular expression matching with support for '.'
and '*'
.express
'.' 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) Some examples: isMatch("aa","a") → false isMatch("aa","aa") → true isMatch("aaa","aa") → false isMatch("aa", "a*") → true isMatch("aa", ".*") → true isMatch("ab", ".*") → true isMatch("aab", "c*a*b") → true
注意test:aa,a*;aaa,a*a;aaa,a*ac;
1 bool isMatch(char* s, char* p) { 2 if(*p=='\0') return *s=='\0'; 3 if(*(p+1)=='*') 4 { 5 while(*s==*p||((*p=='.')&&(*s!='\0'))) 6 { 7 if(isMatch(s,p+2)) return true; 8 s++; 9 } 10 return isMatch(s,p+2); //若爲false,則當s不斷++至‘\0’時,沒法再次與p匹配,如aa,a*,當s=='\0'時,仍需與p+2匹配,輸出正確結果 11 } 12 else 13 { 14 if(*s==*p||((*p=='.')&&(*s!='\0'))) 15 return isMatch(s+1,p+1); 16 return false; 17 } 18 }