Similar with problem No.10, but this time the one line solution is not applicable because the rules here is slightly different from regular expression.
Solution:
# T:O(n) S:O(1) class Solution: # @param s, an input string # @param p, a pattern string # @return a boolean # @good solution! use 'aaaabaaaab' vs 'a*b*b' as an example def isMatch(self, s, p): pPointer = sPointer = ss = 0; star = -1 # ss is star pointer in s, star is star pointer in p while sPointer < len(s): if pPointer < len(p) and (s[sPointer] == p[pPointer] or p[pPointer] == '?'): sPointer += 1; pPointer += 1 continue if pPointer < len(p) and p[pPointer] == '*': star = pPointer; pPointer += 1; ss = sPointer; continue if star != -1: pPointer = star + 1; ss += 1; sPointer = ss continue return False while pPointer < len(p) and p[pPointer] == '*': pPointer += 1 if pPointer == len(p): return True return FalseRun Time: 132 ms
No comments:
Post a Comment