leetcode(6)- 正则表达式匹配

给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。

'.' 匹配任意单个字符
'*' 匹配零个或多个前面的那一个元素

链接:https://leetcode-cn.com/problems/regular-expression-matching

思路是有,就是写起来不行,比官方的代码复杂太多

class Solution:
    def isMatch_i(self,s,p,s_begin,p_begin):
        if s_begin >= len(s) and p_begin >= len(p):
            return True
        elif s_begin < len(s) and p_begin >= len(p):
            return False
        elif s_begin >=len(s):
            if p_begin+1<len(p) and p[p_begin+1]=='*':
                return self.isMatch_i(s,p,s_begin,p_begin+2)
            else :
                return False
        if self.flag[s_begin][p_begin] != 0:
            return True if self.flag[s_begin][p_begin]==1 else False
        isM = 0
        if p_begin+1 < len(p) and p[p_begin+1]=='*':
            isM = isM+1 if self.isMatch_i(s,p,s_begin, p_begin+2) else isM
            if p[p_begin]==s[s_begin] or p[p_begin]=='.':
                isM = isM+1 if self.isMatch_i(s,p,s_begin+1, p_begin) else isM
        else: # 不存在*的情况
            isM = isM+1 if self.isMatch_i(s,p,s_begin+1, p_begin+1) and (s[s_begin]==p[p_begin] or p[p_begin]=='.') else isM
        
        self.flag[s_begin][p_begin] = 1 if isM>0 else -1
       
        return True if isM>0 else False
    def isMatch(self, s: str, p: str) -> bool:
        self.flag = [[0 for i in range(len(p)+2)] for i in range(len(s)+2)]
        return self.isMatch_i(s, p, 0, 0)

class Solution(object):
    def isMatch(self, text, pattern):
        memo = {}
        def dp(i, j):
            if (i, j) not in memo:
                if j == len(pattern):
                    ans = i == len(text)
                else:
                    first_match = i < len(text) and pattern[j] in {text[i], '.'}
                    if j+1 < len(pattern) and pattern[j+1] == '*':
                        ans = dp(i, j+2) or first_match and dp(i+1, j)
                    else:
                        ans = first_match and dp(i+1, j+1)

                memo[i, j] = ans
            return memo[i, j]

        return dp(0, 0)

posted @ 2020-01-01 18:49  木子士心王大可  阅读(180)  评论(0)    收藏  举报