010 - Regular Expression Matching

来源:互联网 发布:数据挖掘导论 豆瓣 编辑:程序博客网 时间:2024/05/01 07:13

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") → falseisMatch("aa","aa") → trueisMatch("aaa","aa") → falseisMatch("aa", "a*") → trueisMatch("aa", ".*") → trueisMatch("ab", ".*") → trueisMatch("aab", "c*a*b") → true正则表达式匹配
char *nextlogiceq(char s, char *p){if (!*p) return NULL;if (*p == '.' || s == *p) return p;if (p[1] == '*') return nextlogiceq(s, p + 2);return NULL;}int isMatch(char* s, char* p) {while (*p && *s) {if (p[1] != '*') {if (*p == '.' || *s == *p) p++,s++;elsereturn 0;} else {if (*p != '.' && *s != *p) {    p += 2;    continue;}char *tmp = nextlogiceq(*s, p + 2);if (tmp)if (isMatch(s, tmp)) return  1;s += 1;continue;}}if (*s) return 0;while (*p)if (p[1] == '*') p+=2;else return 0;return 1;}


0 0