請實現乙個函式用來匹配包括'.'和'*'的正規表示式。模式中的字元'.'表示任意乙個字元,而'*'表示它前面的字元可以出現任意次(包含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...