題目描述
請實現乙個函式用來匹配包括』.『和』『的正規表示式。模式中的字元』.『表示任意乙個字元,而』'表示它前面的字元可以出現任意次(包含0次)。 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串"aaa"與模式"a.a"和"abaca"匹配,但是與"aa.a"和"ab*a"均不匹配
動態規劃:
這道題邊界情況也有點多,首先判斷s和pattern的長度,分出了四種情況,其中
1.如果s與pattern都為空,則true;
2.如果s不為空,而pattern為空,則false;
3.如果s為空,而pattern不為空,判斷pattern是否是a…這種情況,可以代表0次,這樣一來可以將pattern往後移兩位再進行match遞迴;
4.如果s、pattern不為空,又可以分為兩種情況:
4.1.如果pattern的第二個字元不為時,如果s[0]與pattern[0]能匹配上就將s和pattern都往後移1位再進行match,否則不匹配為false;
4.2.如果pattern的第二個字元為時,如果s[0]與pattern[0]匹配不上,則將pattern後移2位再進行match;如果s[0]與pattern[0]能匹配上,會出現三種情況,分別是pattern[1] = ''的代表的三種情況0、1或多個,分別對應pattern後移2位s不變、pattern後移2位,s後移1位、pattern不變s後移1位,這三種情況都有可能出現所以用or或運算連線三種情況的遞迴。
# -*- coding:utf-8 -*-
class
solution
:# s, pattern都是字串
defmatch
(self, s, pattern)
:# write code here
ls =
len(s)
lp =
len(pattern)
if ls==
0and lp==0:
return
true
elif ls!=
0and lp==0:
return
false
elif ls==
0and lp!=0:
# pattern中的第二個字元為*,則pattern後移兩位繼續比較
if lp>
1and pattern[1]
=='*'
:return self.match(s,pattern[2:
])else
:return
false
# 如果s不為空,pattern也不為空,則需要判斷
else
:# pattern的第二個字元為*的情況
if lp >
1and pattern[1]
=='*'
:# s與pattern的第乙個元素不同,則s不變,pattern後移兩位,相當於pattern前兩位當成空
if s[0]
!= pattern[0]
and pattern[0]
!='.'
:return self.match(s, pattern[2:
])# 如果s[0]與pattern[0]相同,且pattern[1]為*
else
:# 會有三種情況
# pattern後移2個,s不變;相當於把pattern前兩位當成空,匹配後面的,把*當做0次
f1 = self.match(s, pattern[2:
])# pattern後移2個,s後移1個;相當於pattern前兩位與s[0]匹配,把*當做1次
f2 = self.match(s[1:
], pattern[2:
])# pattern不變,s後移1個;相當於pattern前兩位,與s中的多位進行匹配,把*當做多次
f3 = self.match(s[1:
], pattern)
# 有乙個為真就能返回真值
return f1 or f2 or f3
# pattern的第二個字元不為*的情況
else
:# s和pattern的第乙個字元匹配上了,都往後移1位
if s[0]
== pattern[0]
or pattern[0]
=='.'
:return self.match(s[1:
],pattern[1:
])else
:return
false
52 正規表示式匹配
題目 請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 ab ac a 匹配,但是與 aa.a 和 ab a 均不匹配 思路 當模式中的第二...
( )52 正規表示式匹配
請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 ab ac a 匹配,但是與 aa.a 和 ab a 均不匹配 leetcode對應題目 ...
52 正規表示式匹配
題目描述 請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 ab ac a 匹配,但是與 aa.a 和 ab a 均不匹配 分析 現在只考慮...