leetcode(6) - 正規表現マッチング

サポート「」と「*」正規表現のマッチングでを実装するためにあなたを招待し、あなたの文字列sと法pを与えます。

「」任意の一文字にマッチ
『*』マッチがゼロまたはそれ以上の前述の1つの要素を

リンク: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)

おすすめ

転載: www.cnblogs.com/Lzqayx/p/12129509.html
おすすめ