44. Wildcard Matching Leetcode Python
Implement wildcard pattern matching with support for
'?'
and '*'
. '?' Matches any single character.
'*' Matches any sequence of characters (including the empty sequence).
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", "*") → true
isMatch("aa", "a*") → true
isMatch("ab", "?*") → true
isMatch("aab", "c*a*b") → false
class Solution:
# @param s, an input string
# @param p, a pattern string
# @return a boolean
## example s = aa p = *
# start will maintain the position and i will increase
def isMatch(self, s, p):
i = 0
j = 0
sstar = 0
star = -1
while i < len(s):
## first case compare ? or whether they are exactly the same
if j < len(p) and (s[i] == p[j] or p[j] == '?'):
i += 1
j += 1
## if there is a * in p we mark current j and i
elif j < len(p) and p[j] == '*':
star = j
j += 1
sstar = i
## if current p[j] is not * we check whether prior state has *
elif star != -1:
j = star + 1
sstar += 1
i = sstar
else:
return False
while j < len(p) and p[j] == '*':
j += 1
if j == len(p):
return True
return False