python - Leetcode 10 - 正则表达式(regex)匹配解决方案(在 Python 中)不适用于 Leetcode 环境
问题描述
10.正则表达式匹配(HARD)
给定一个输入字符串 s 和一个模式 p,实现支持 '.' 的正则表达式匹配。和 '*' 其中:
'。' 匹配任何单个字符。 '*' 匹配零个或多个前面的元素。匹配应覆盖整个输入字符串(不是部分)。
示例 1:
输入:s = "aa", p = "a" 输出:false 解释:"a" 不匹配整个字符串 "aa"。
示例 2:
输入:s = "aa", p = "a*" 输出:true 解释:'*' 表示前面的元素 'a' 的零个或多个。因此,通过重复一次“a”,它就变成了“aa”。
示例 3:
输入:s = "ab", p = ". " 输出:true 解释:". " 表示“零个或多个 (*) 任意字符 (.)”。示例 4:
输入:s = "aab", p = "c a b" 输出:true 解释:c 可以重复 0 次,a 可以重复 1 次。因此,它匹配“aab”。
示例 5:
输入:s = "mississippi", p = "mis is p*." 输出:假
约束:
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 Code 如下所示,并期望根据匹配返回“true”或“false”:
class Solution:
def isMatch(self, s: str, p: str) -> bool:
#code starts from here
在上面的存根中使用相同的代码似乎不起作用,并且只为每个测试用例打印“true”:(。但是,如果我使用打印语句代替 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.
请帮我解决这个问题。我不知道为什么当我使用 return 语句时 Leetcode 没有显示正确的输出。下面给出 Leetcode 环境中使用的测试用例,其中交替的行分别代表“字符串”和“模式”:
"aa"
"a"
"aa"
"a*"
"ab"
".*"
"aab"
"c*a*b"
"mississippi"
"mis*is*p*."
解决方案
您的函数应该返回一个布尔值 ( -> bool
),因此您可以直接返回fullmatch
:
class Solution:
def isMatch(self, s: str, p: str) -> bool:
pattern = re.compile(rf"{p}")
return pattern.fullmatch(s)
推荐阅读
- unity3d - Apk 文件在“构建和运行”之后去哪里?
- c# - 为什么 System.Net.Http.HttpMethod 是一个类,而不是一个结构?
- xml - 有没有一种简单的方法来表示 xsl 样式表中的引号?
- google-maps - 谷歌地图样式版本 - 即使在关闭可见性后,标签也有笔触效果
- typescript - 界面中的分隔符有什么区别?
- jquery - Jquery:如何循环遍历大数据量的xml数组
- gradle - 如何在 Gradle 中获取与 init 脚本相对应的脚本实例?
- selenium - JMeter 是否使用 junit 采样器测量服务器响应?
- android - 如何从 json 对象中获取数据
- c# - AutoMapper - 展平/取消展平到列表