Python 中的通配符匹配
pythonserver side programmingprogramming更新于 2026/1/15 6:36:17
假设我们有一个输入字符串 s 和另一个输入字符串 p。这是主字符串,p 是模式。我们必须定义一个可以匹配字符串中模式的方法。所以我们必须为正则表达式实现它,它支持通配符,如 ‘?’ 和 ‘*’。
点 ‘?’ 匹配任何单个字符
星号 ‘*’ 匹配零个或多个字符。
例如,如果输入像 s = “aa”并且 p = “a?”,那么它将为真,对于相同的输入字符串,如果模式是 “?*”,那么它将为真。
为了解决这个问题,我们将遵循以下步骤 −
ss := s 的大小和 ps := p 的大小
使 dp 成为大小为 ss x ps 的矩阵,并使用 false 值填充它
通过在它们之前添加一个空格来更新 p 和 s
对于范围为 1 到 ps 的 i −
如果 p[i] = star,则
dp[0, i] := dp[0, i - 1]
对于范围为 1 到 ss 的 i
对于范围为 1 到 ps 的 j
如果 s[i] 是 p[j],或者 p[j] 是 ‘?’,则
dp[i, j] := dp[i – 1, j – 1]
否则,当 p[j] 为星号时,则
dp[i, j] := dp[i – 1, j] 和 dp[i, j – 1]
返回 dp[ss, ps]
示例 (Python)
让我们看看下面的实现以便更好地理解 −
class Solution(object):
def isMatch(self, s, p):
sl = len(s)
pl = len(p)
dp = [[False for i in range(pl+1)] for j in range(sl+1)]
s = " "+s
p = " "+p
dp[0][0]=True
for i in range(1,pl+1):
if p[i] == '*':
dp[0][i] = dp[0][i-1]
for i in range(1,sl+1):
for j in range(1,pl+1):
if s[i] == p[j] or p[j] == '?':
dp[i][j] = dp[i-1][j-1]
elif p[j]=='*':
dp[i][j] = max(dp[i-1][j],dp[i][j-1])
return dp[sl][pl]
ob = Solution()
print(ob.isMatch("aa", "a?"))
print(ob.isMatch("aaaaaa", "a*"))
输入
"aa", "a." "aaaaaa", "a*"
输出
True True
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

