• [LeetCode] 10. 正则表达式匹配


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

    题目描述:

    给定一个字符串 (s) 和一个字符模式 (p)。实现支持 '.''*' 的正则表达式匹配。

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

    匹配应该覆盖整个字符串 (s) ,而不是部分字符串。

    说明:

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

    示例:

    示例 1:

    输入:
    s = "aa"
    p = "a"
    输出: false
    解释: "a" 无法匹配 "aa" 整个字符串。
    

    示例 2:

    输入:
    s = "aa"
    p = "a*"
    输出: true
    解释: '*' 代表可匹配零个或多个前面的元素, 即可以匹配 'a' 。因此, 重复 'a' 一次, 字符串可变为 "aa"。
    

    思路:

    动态规划

    直接上动态方程:

    1. p[j] == s[i]:dp[i][j] = dp[i-1][j-1]

    2. p[j] == ".":dp[i][j] = dp[i-1][j-1]

    3. p[j] =="*":

      3.1 p[j-1] != s[i]:dp[i][j] = dp[i][j-2]

      3.2 p[i-1] == s[i] or p[i-1] == ".":

      dp[i][j] = dp[i-1][j] // 多个a的情况

      or dp[i][j] = dp[i][j-1] // 单个a的情况

      or dp[i][j] = dp[i][j-2] // 没有a的情况

    代码:

    class Solution:
        def isMatch(self, s: str, p: str) -> bool:
            #if not s or not p:
                #return False
            s_len = len(s)
            p_len = len(p)
            dp = [[False] * (p_len + 1) for _ in range(s_len + 1)]
            #print(dp)
            dp[0][0] = True
            for i in range(p_len):
                if p[i] == "*" and dp[0][i - 1]:
                    dp[0][i + 1] = True
            #print(dp)
            for i in range(s_len):
                for j in range(p_len):
                    if p[j] == s[i] or p[j] == ".":
                        dp[i + 1][j + 1] = dp[i][j]
                    elif p[j] == "*":
                        if p[j - 1] != s[i]:
                            dp[i + 1][j + 1] = dp[i + 1][j - 1]
                        if p[j-1] == s[i] or p[j-1] == ".":
                            dp[i+1][j+1] = (dp[i][j+1] or dp[i+1][j]   or  dp[i+1][j-1])
            #print(dp)
            return dp[-1][-1]
    
  • 相关阅读:
    HTML5新增
    【目录】洛谷|CODEVS题解汇总
    【搜索】kkksc03考前临时抱佛脚
    【模拟】压缩技术
    【模拟】爱与愁的一千个伤心的理由
    【搜索】棋盘
    【模拟】图书管理员
    【递归】对称二叉树
    【题单】挖坑大行动
    【模拟】弹珠游戏
  • 原文地址:https://www.cnblogs.com/powercai/p/10736890.html
Copyright © 2020-2023  润新知