【面試題19】正則表達式匹配

在這裏插入圖片描述
Python題解

# -*- coding:utf-8 -*-
class Solution:
    # s, pattern都是字符串
    def match(self, s, pattern):
        def matchCore(s, i, pattern, j):
            if i == len(s) and j == len(pattern):
                return True
            if i != len(s) and j == len(pattern):
                return False
            if j+1 < len(pattern) and pattern[j+1] == "*":
                #模式第二個字符是*,且字符串與模式首字符相等,再往下分三種情況;否則,模式後移2位
                if (i != len(s) and pattern[j] == s[i]) or (pattern[j] == "." and i != len(s)):
                    #1.匹配一個 2.匹配一個,後面繼續匹配 3.不匹配
                    return matchCore(s, i+1, pattern, j+2) \
                or matchCore(s, i+1, pattern, j) \
                or matchCore(s, i, pattern, j+2)
                else:
                    return matchCore(s, i, pattern, j+2)
            if (i != len(s) and pattern[j] == s[i]) or (pattern[j] == "." and i != len(s)):
                return matchCore(s, i+1, pattern, j+1)
            return False
        i, j = 0, 0
        return matchCore(s, i, pattern, j)

考點

  • 考查對字符串的編程能力;
  • 考查對正則表達式的理解;
  • 考查思維的全面性。要全面考慮普通字符、".“和”*“並分析它們的匹配模式。在測試階段,要充分考慮普通字符、”.“和”*"三者的排列組合,儘量完備的想出所有可能的測試用例。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章