劍指offer 正規表示式匹配

2021-10-04 10:09:10 字數 1536 閱讀 3405

題目描述

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

思路

根據題意,利用遞迴,分為兩類:

第一、當前pattern的下乙個元素為✳時,

若當前pattern元素為』.『時,可與任意元素匹配,此時可以將s和pattern都向後一位尋找、將pattern向後兩位尋找、將s向後一位尋找。

否則將pattern向後兩位尋找。

第二、當前pattern的下乙個元素不是✳時,則按位匹配。

大概思路是這樣,但是存在s=』』,pattern=』.✳』等等情況,要注意陣列會不會越界。

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

class

solution

:# s, pattern都是字串

defmatch

(self, s, pattern)

:# write code here

ifnot s and

not pattern:

return

true

ifnot pattern:

return

false

iflen

(pattern)==1

:iflen(s)==1

and(s[0]

==pattern[0]

or pattern[0]

=='.'):

return

true

else

:return

false

else:if

not s and pattern[1]

=='*'

andlen

(pattern)==2

:return

true

if pattern[1]

=='*'

:if s and

(pattern[0]

==s[0]

or pattern[0]

=='.'):

return self.match(s[1:

],pattern)

or self.match(s[1:

],pattern[2:

])or self.match(s,pattern[2:

])else

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

])else

:if pattern[0]

==s[0]

or pattern[0]

=='.'

:return self.match(s[1:

],pattern[1:

])else

:return

false

劍指offer 正規表示式匹配

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

劍指Offer 正規表示式匹配

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

劍指offer 正規表示式匹配

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