1. 程式人生 > >[leetcode]10. Regular Expression Matching

[leetcode]10. Regular Expression Matching

錯誤 pure () asto tco let letter The else

(leetcode給的範例已經不是模糊了 根本就是導向答題者往錯誤的地方想,還是要自己做好分類。

錯誤的思路,無法處理字符串中央的.*代表匹配0次:

class Solution:
    def isMatch(self, s: str, p: str) -> bool:
        # s p could be empty s(a-z) p(a-z . *)
        #* mean single letter ssss not mismismis
        lenS = len(s)
        lenP = len(p)
        
# deal empty if lenP == 0: return False #.* if p ==.*: return True # deal p is pure alphabet if . not in p and * not in p: if p == s: return True else: return False
# only ‘.‘ in p if . in p and * not in p: if lenS == lenP: for index in range(lenS): if p[index] == . or p[index] == s[index]: if index == lenS - 1: return True
else: return False else: return False # only ‘*‘ in p and # both ‘.‘ and ‘*‘ in p if lenS == 0: return True part = p.split("*") if part[len(part)-1] == ‘‘: part.pop() #-1 will remove ‘.‘ use pop else: if len(part[len(part)-1]) >1: #have more than one mark in the end lastone = part[len(part)-1] for index in range(len(lastone)): if lastone[index] == .: s = s[:-1] part.pop() else: if part[len(part) - 1] == s[-1]: s = s[:-1] part.pop() else: # have a single letter in the end or have a ‘.‘ in the end if part[len(part) - 1] == .: # there have a ‘.‘ in the end s = s[:-1] part.pop() else: # have a single letter in the end if part[len(part) - 1] == s[-1]: s = s[:-1] part.pop() for index in range(len(part)): # -1 to remove ‘‘ in the end if part[index] == .: part[index] = s[0:1] #first alphabet need to compare if len(part[index]) >1: if part[index][0:len(part[index])-1] == s[0:len(part[index])-1]: s = s[len(part[index]) - 1:] part[index] = part[index][-1] else: return False while(True): lenIndex =len(part[index]) if part[index] == s[0:lenIndex]: s = s[lenIndex:] else: break if len(s) == 0: #not lenS return True else: return False

[leetcode]10. Regular Expression Matching