bool isMatch(char *s, char *p) { if (!p || p[0] == NULL) return (!s || s[0] == NULL); bool head_match = (s && s[0] && (s[0] == p[0] || p[0] == '.')); if (p[1] && p[1] == '*') { return (head_match && isMatch(s + 1, p)) || isMatch(s, p + 2); } else { return head_match && isMatch(s + 1, p + 1); } }