python3 with explanation
\nclass Solution:\n    def isMatch(self, s: str, p: str) -> bool:\n        sPos, pPos = 0, 0\n        starPos, wildPos = -1, -1\n        while (sPos < len(s)):\
```\nclass Solution:\n    def isMatch(self, s: str, p: str) -> bool:\n        sPos, pPos = 0, 0\n        starPos, wildPos = -1, -1\n        while (sPos < len(s)):\n            if pPos < len(p) and p[pPos] in (\'?\', s[sPos]): #match one char in p\n                pPos += 1\n                sPos += 1\n            elif pPos < len(p) and p[pPos] == \'*\': #match * begin\n                starPos, wildPos = pPos, sPos # record the start position and the wildcard beginning position\n                pPos += 1\n            else:\n                # not match, backtrack use *\n                if (starPos < 0): return False\n                pPos = starPos + 1 # p position reset to the next one after recorded star\n                sPos = wildPos + 1 # s position set to next one from the wildcard pos\n                wildPos += 1 # use the * to match one more\n            \n        \n        while pPos < len(p) and p[pPos] == \'*\':\n               pPos += 1 # skip the remaining * in p\n        return pPos == len(p)\n    \n```
[]