Leetcode 10 - 正则表达式 (regex) 匹配解决方案 (in Python) 不适用于 Leetcode 环境

Leetcode 10 - Regular Expresssion (regex) Matching Solution (in Python) not working on Leetcode Environment

10。 Regular Expression Matching(难)

给定一个输入字符串 s 和一个模式 p,实现支持“.”的正则表达式匹配。和“*”,其中:

'.'匹配任何单个字符。 '*' 匹配零个或多个前面的元素。 匹配应该覆盖整个输入字符串(不是部分)。

示例 1:

输入:s = "aa", p = "a" 输出:错误 解释:“a”不匹配整个字符串“aa”。

示例 2:

输入:s = "aa", p = "a*" 输出:真 解释:'*'表示零个或多个前面的元素,'a'。因此,重复'a'一次,就变成了“aa”。

示例 3:

输入:s = "ab", p = "." 输出:真 解释:“.”表示“任意字符 (.) 的零个或多个 (*)”。 示例 4:

输入:s = "aab", p = "cab" 输出:真 解释:c可以重复0次,a可以重复1次。因此,它匹配“aab”。

示例 5:

输入:s = “mississippi”,p = “misisp*。” 输出:假

限制条件:

1 <= s.length <= 20 1 <= p.length <= 30 s 仅包含小写英文字母。 p 仅包含小写英文字母、'.' 和 ''。 保证字符''的每次出现,都会有一个之前的有效字符匹配。

我提出了我的解决方案,它似乎在我的本地 python 环境中可以正常工作,但在 Leetcode 环境中不起作用

我的代码(在我的本地 Python 解释器上):

import re

p = "m.*m"
s = "madam"

p = r"{}".format(p)
p = re.compile(p)
if p.fullmatch(s):
    print("true")
else:
    print("false")

输出:

true

Leetcode 上的 Stubbed 代码如下所示,并期望 return 基于匹配的“真”或“假”:

class Solution:
    def isMatch(self, s: str, p: str) -> bool:
    #code starts from here

在上面的存根中使用相同的代码似乎不起作用,并且只为每个测试用例打印“true”:(。但是,如果我使用打印语句代替 return,它产生正确的输出。但是,由于代码 requests/expects 只有 return 值,它标记我的答案是错误的。

我在 LeetCode 上的确切代码:

class Solution:
    def isMatch(self, s: str, p: str) -> bool:
        p = r"{}".format(p)
        p = re.compile(p)
        if p.fullmatch(s):
            return "true"
        else:
            return "false"

使用 print 语句,它在“stdout”而不是“Output”中产生正确的输出。

请帮我解决这个问题。我不知道为什么 Leetcode 在我使用 return 语句时没有显示正确的输出。 Leetcode环境下使用的测试用例如下,其中隔行分别代表“string”和“pattern”:

"aa"
"a"
"aa"
"a*"
"ab"
".*"
"aab"
"c*a*b"
"mississippi"
"mis*is*p*."

你的函数应该 return 一个布尔值 (-> bool) 所以你可以直接 return fullmatch:

class Solution:
    def isMatch(self, s: str, p: str) -> bool:
        pattern = re.compile(rf"{p}")
        return pattern.fullmatch(s)