leetcode练习 正则表达式匹配

题目描述

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

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

所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。
说明:

s 可能为空,且只包含从 a-z 的小写字母。
p 可能为空,且只包含从 a-z 的小写字母,以及字符 .*
题目链接

思路与结果分析

dp[i][j]表示p[:i]和s[:j]匹配

class Solution:
    def isMatch(self, s, p):
        s_length = len(s)
        p_length = len(p)
        dp = [[False for j in range(s_length)]for i in range(p_length)]
        dp[0][0] = True
        for i in range(1, p_length):
            for j in range(s_length):
                if p[i-1] == '*':
                    match_char = j>0 and (p[i-2]==s[j-1] or p[i-2] == '.')
                    dp[i][j] = dp[i-2][j] or (match_char and dp[i][j-1])
                else:
                    match_char = j>0 and (p[i-1]==s[j-1] or p[i-1]=='.')
                    dp[i][j] = match_char and dp[i-1][j-1]
        return dp[p_length-1][s_length-1]


if __name__ == "__main__":
    s = "aa"
    p = "a"
    result = Solution()
    print(result.isMatch(s, p))

结果leetcode练习 正则表达式匹配_第1张图片

你可能感兴趣的:(python,leetcode练习)