Python中的正则表达式匹配
假设我们有一个输入字符串 s 和另一个输入字符串 p。其中 s 是主字符串,p 是模式。我们需要定义一个方法,可以匹配字符串中的模式。所以我们需要为支持“.”和“*”的正则表达式实现这一点。
点“.”匹配任何单个字符
星号“*”匹配前面元素的零个或多个。
例如,如果输入类似于 s = “aa” 和 p = “a.”,则结果为真;对于相同的输入字符串,如果模式是“.*”,则结果也为真。
为了解决这个问题,我们将遵循以下步骤:
ss := s 的大小,ps := p 的大小
创建一个大小为 ss x ps 的 dp 矩阵,并使用 false 值填充它
通过在这些之前添加一个空格来更新 p 和 s
对于 i 的范围从 2 到 ps
当 p[i] 为星号时,dp[0, i] := dp[0, i - 2],否则为 False
对于 i 的范围从 1 到 ss
对于 j 的范围从 1 到 ps
如果 s[i] 等于 p[j],或者 p[j] 为点,则
dp[i, j] := dp[i – 1, j – 1]
否则,当 p[j] 为星号时,则
dp[i, j] := dp[i, j - 2]
如果 s[i] 等于 p[j – 1] 或 p[j – 1] 为点,则
dp[i, j] := dp[i, j] 和 dp[i – 1, j] 的最大值
返回 dp[ss, ps]
示例
让我们看看以下实现以获得更好的理解:
class Solution(object):
def isMatch(self, s, p):
ss = len(s)
ps = len(p)
dp = [[False for i in range(ps+1)] for j in range(ss+1)]
p = " "+p
s = " " + s
dp[0][0]=True
for i in range(2,ps+1):
dp[0][i] = dp[0][i-2] if p[i]=='*'else False
for i in range(1,ss+1):
for j in range(1,ps+1):
if s[i] ==p[j] or p[j]=='.':
dp[i][j]= dp[i-1][j-1]
elif p[j] == '*':
dp[i][j] = dp[i][j-2]
if s[i] == p[j-1] or p[j-1]=='.':
dp[i][j] = max(dp[i][j],dp[i-1][j])
return dp[ss][ps]
ob = Solution()
print(ob.isMatch("aa", "a."))
print(ob.isMatch("aaaaaa", "a*"))输入
"aa", "a." "aaaaaa", "a*"
输出
True True
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP