# -*- coding:utf-8 -*-
'''題目:請實現乙個函式用來匹配包括'.'和'*'的正規表示式。
模式中的字元'.'表示任意乙個字元(不包括空字元!),而'*'表示它前面的字元可以出現任意次(包含0次)。
在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串"aaa"與模式"a.a"和"ab*ac*a"匹配,但是與"aa.a"和"ab*a"均不匹配
'''class
solution
:# s, pattern都是字串
defmatch
(self, s, pattern)
:# 如果s與pattern都為空,則true
iflen
(s)==
0and
len(pattern)==0
:return
true
# 如果s不為空,而pattern為空,則false
elif
len(s)!=0
andlen
(pattern)==0
:return
false
# 如果s為空,而pattern不為空,則需要判斷
elif
len(s)==0
andlen
(pattern)!=0
:# pattern中的第二個字元為*,則pattern後移兩位繼續比較
iflen
(pattern)
>
1and pattern[1]
=='*'
:return self.match(s, pattern[2:
])else
:return
false
# s與pattern都不為空的情況
else
:# pattern的第二個字元為*的情況
iflen
(pattern)
>
1and 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
Python 正規表示式匹配
請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 ab ac a 匹配,但是與 aa.a 和 ab a 均不匹配 coding utf 8 ...
正規表示式 匹配
字串 void abtr quint32 ab 表示乙個正規表示式 template class bidirectionaliterator class allocator std allocator sub match bidirectionaliterator class match resul...
正規表示式匹配
請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 ab ac a 匹配,但是與 aa.a 和 ab a 均不匹配 解法 首先要想到用遞迴處理...