zoukankan      html  css  js  c++  java
  • 19、正则表达式匹配

    请实现一个函数用来匹配包含'. '和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但与"aa.a"和"ab*a"均不匹配。

    示例 1:

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

    class Solution:
        def isMatch(self, s: str, p: str) -> bool:
            if not p:
                return not s
            first_match = bool(s) and p[0] in {s[0], '.'}
            if len(p) >= 2 and p[1] == '*':
                return (first_match and self.isMatch(s[1:], p)) or self.isMatch(s, p[2:])
            else:
                return first_match and self.isMatch(s[1:], p[1:])
    class Solution:
        def isMatch(self, s: str, p: str) -> bool:
            dp = [[False] * (len(p) + 1) for _ in range(len(s) + 1)]
            dp[-1][-1] = True
            for i in range(len(s), -1, -1):
                for j in range(len(p) - 1, -1, -1):
                    first_match = i < len(s) and p[j] in {s[i], '.'}
                    if j + 1 < len(p) and p[j] == '*':
                        dp[i][j] = dp[i][j + 2] or (first_match and dp[i + 1][j])
                    else:
                        dp[i][j] = first_match and dp[i + 1][j + 1]
            return dp[0][0]
  • 相关阅读:
    NC105 二分查找
    Spark-Streaming总结
    spark java API 实现二次排序
    在eclipse上安装Scala插件
    maven:missing artifact jdk.tools:jar:1.7
    使用 Hive装载数据的几种方式
    Eclipse debug 调试快捷键
    yarn工作流程
    Windows 7 下安装mysql-5.7.18-winx64.zip
    希尔排序
  • 原文地址:https://www.cnblogs.com/liushoudong/p/13622374.html
Copyright © 2011-2022 走看看