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)
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
1 class Solution { 2 public: 3 bool isMatch(const char *s, const char *p) { 4 5 if(s==NULL||p==NULL) return false; 6 if(*p==‘\0‘&&*s==‘\0‘) return true; 7 if(*p==‘\0‘&&*s!=‘\0‘) return false; 8 9 //如果模式串下一个字符为* 10 if(*(p+1)==‘*‘) 11 { 12 //循环比较当前字符与模式串字符是否相等 13 while((*s!=‘\0‘&&*p==‘.‘)||(*s==*p)) 14 { 15 //防止这种情况出现:"aaa", "a*a" 16 if(isMatch(s,p+2)) return true; 17 s++; 18 } 19 return isMatch(s,p+2); 20 } 21 else if((*s!=‘\0‘&&*p==‘.‘)||*s==*p) 22 { 23 //如果当前元素相等,则开始匹配下一个元素 24 return isMatch(s+1,p+1); 25 } 26 return false; 27 } 28 };
【leetcode】Regular Expression Matching
原文:http://www.cnblogs.com/reachteam/p/4209445.html