[LeetCode]Regular Expression Matching

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


思考:难度4.9,参考这里
bool isMatch(const char *s, const char *p)

{  

	assert(s && p);  

	if (*p == '\0') return *s == '\0';

	// next char is not '*': must match current character  

	if (*(p+1) != '*') 

	{   

		assert(*p != '*'); 

		return ((*p == *s) || (*p == '.' && *s != '\0')) && isMatch(s+1, p+1);  } 

	// next char is '*' 

	while ((*p == *s) || (*p == '.' && *s != '\0'))

	{    

		if (isMatch(s, p+2)) return true;  

		s++;  

	}  

	return isMatch(s, p+2);

}

  

你可能感兴趣的:([LeetCode]Regular Expression Matching)