正規表示式匹配

Joy_917發表於2020-12-27

題目:

請實現一個函式用來匹配包括’.‘和’‘的正規表示式。模式中的字元’.‘表示任意一個字元,而’'表示它前面的字元可以出現任意次(包含0次)。 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串"aaa"與模式"a.a"和"abaca"匹配,但是與"aa.a"和"aba"均不匹配
示例1
輸入:“aaa”,"a
a"
返回值:true

思路:

  1. 用遞迴來模擬匹配邏輯,有無*是下一步判斷的關鍵
  2. 需要注意的是陣列越界,所以此處用python的切片來強調邏輯

程式碼:

# -*- coding:utf-8 -*-
class Solution:
    # s, pattern都是字串
    def match(self, s, pattern):
        # write code here
        if s==pattern: return True
        if len(pattern)>1 and pattern[1]=="*":
            if s and (s[0]==pattern[0] or pattern[0]=="."):
                # 因為*可能前一個字元出現0次,所以用or來表示前一個字元是否出現0次的情況都是可以的
                return self.match(s, pattern[2:]) or self.match(s[1:], pattern)
            else:
                return self.match(s, pattern[2:])
        elif s and pattern and (s[0]==pattern[0] or pattern[0]=="."):
            return self.match(s[1:], pattern[1:])
        return False

相關文章