It is easy to come up with the recursive backtracking solution (for each * in the pattern, the wildcard can match many char sequences). But the time complexity is exponential.
Here is my observation:
So the algorithm is to consume the head and tail of p first, until p starts and ends with * (or p is empty). Then split p into subpatterns, find each subpattern sequentially in s, if all of them can be found, return True, else, return False.