牛客網 (標星)正規表示式的匹配

2022-09-11 22:51:29 字數 1560 閱讀 8615

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

自己在那敲了兩個小時...無窮無盡的情況補漏洞補到我要die!!!!

隱隱能感到可以用遞迴

但是 遇到這種感覺就習慣去分情況寫,看了討論覺得自己就是個渣渣

class solution:

# s, pattern都是字串

def match(self, s, pattern):

# 如果s與pattern都為空,則true

if len(s) == 0 and len(pattern) == 0:

return true

# 如果s不為空,而pattern為空,則false

elif len(s) != 0 and len(pattern) == 0:

return false

# 如果s為空,而pattern不為空,則需要判斷

elif len(s) == 0 and len(pattern) != 0:

# pattern中的第二個字元為*,則pattern後移兩位繼續比較

if len(pattern) > 1 and pattern[1] == '*':

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

else:

return false

# s與pattern都不為空的情況

else:

# pattern的第二個字元為*的情況

if len(pattern) > 1 and pattern[1] == '*':

# s與pattern的第乙個元素不同,則s不變,pattern後移兩位,相當於pattern前兩位當成空

if s[0] != pattern[0] and pattern[0] != '.':

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

else:

# 如果s[0]與pattern[0]相同,且pattern[1]為*,這個時候有三種情況

# pattern後移2個,s不變;相當於把pattern前兩位當成空,匹配後面的

# pattern後移2個,s後移1個;相當於pattern前兩位與s[0]匹配

# pattern不變,s後移1個;相當於pattern前兩位,與s中的多位進行匹配,因為*可以匹配多位

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

# pattern第二個字元不為*的情況

else:

if s[0] == pattern[0] or pattern[0] == '.':

return self.match(s[1:], pattern[1:])

else:

return false

牛客網 正規表示式匹配

給出匹配串,給出模式串。給出兩種正則運算,乙個是.點 表示佔位代表任意乙個字元,乙個是字元 例如a 代表此處可以有任意個 前面的字元。一開始想著是正著慢慢模擬,但是顯然不可行,正著做顯然是直接使用了前面的字元,而每次特殊判斷字元後是不是 號過於複雜。第二個想著是倒著匹配,碰到 號了往新串中新增字元,...

牛客網 正規表示式匹配(字串)

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

牛客網劍指offer之正規表示式匹配

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