劍指offer 52 正規表示式匹配 python

2021-10-06 23:53:10 字數 1608 閱讀 5236

請實現乙個函式用來匹配包括』.『和』『的正規表示式。模式中的字元』.『表示任意乙個字元,而』'表示它前面的字元可以出現任意次(包含0次)。 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串"aaa"與模式"a.a"和"abaca"匹配,但是與"aa.a"和"ab*a"均不匹配

方法一:

# -*- coding:utf-8 -*-

import re

class

solution

:# s, pattern都是字串

defmatch

(self, s, pattern)

:# write code here

return

true

if re.match(

"^"+ pattern +

"$", s)

else

false

方法二:

模式中的字元』.『表示任意乙個字元,而』『表示它前面的字元可以出現任意次(包含0次)

字元』.'不重要,可以是任何字元。重點考慮字元「」。

兩種情況:

1.模式的下乙個字元不是』『號時:

如果第一字元相匹配,那麼字串和模式都後移一位,

如果不匹配,直接返回false;

2.模式的下乙個字元是』'號時:

如果字串第乙個字元和模式第乙個字元不匹配,把模式後移兩位(相當於匹配0位),繼續匹配。

如果第乙個字元相匹配,有三種處理情況:

1.可以把模式後移兩位,相當於x被忽略。

2.字串後移一位,模式不變,繼續匹配字串的一位,可以匹配多位。

3.字串後移一位,模式後移兩位,匹配下乙個字元和跳過的模式(相當於*匹配乙個字元)。

# -*- coding:utf-8 -*-

class

solution

:# s, pattern都是字串

defmatch

(self, s, pattern)

:# write code here

if s == pattern:

return

true

iflen

(pattern)

>

1and pattern[1]

=='*'

:if s and

(s[0

]==pattern[0]

or pattern[0]

=='.'):

return self.match(s,pattern[2:

])or self.match(s[1:

],pattern)

else

:return self.match(s,pattern[2:

])elif s and pattern and

(s[0

]== pattern[0]

or pattern[0]

=='.'):

return self.match(s[1:

],pattern[1:

])return

false

劍指offer 52 正規表示式匹配

請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 ab ac a 匹配,但是與 aa.a 和 ab a 均不匹配 本題的主要思路如下 首先判...

劍指offer52 正規表示式匹配

請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 abaca 匹配,但是與 aa.a 和 ab a 均不匹配 參考leetcode10.正規...

劍指offer(52)正規表示式匹配

問題描述 請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 ab ac a 匹配,但是與 aa.a 和 ab a 均不匹配。思路 首先判斷兩...