思路:
參考度娘其他大佬的思路,總結了一下。
匹配總共分兩種情況:
模式的第二位是否為「*」:
1、是「*」:
則有三種匹配方式:
模式第乙個與字串第乙個相等或者模式第乙個為「.」(代表任意),直接模式和字串都加1。
字串第乙個與模式的「*」後一位相等,字串不動,模式加2。
字串連續幾個相同,模式不變,字串加1.
2、不是「*」:
模式第乙個與字串第乙個相等或者模式第乙個為「.」(代表任意),直接模式和字串都加1;
否則匹配不成功。
注意
判斷字串為空和模式為空的情況
若以上都走完,剩下的情況都是不匹配
def ismatch(self, s: str, p: str) -> bool:
if not p:
return not s
if len(p)>1 and p[1]=='*':
return (s and (s[0]==p[0]or p[0]=='.'))and self.ismatch(s[1:],p)or self.ismatch(s,p[2:])
else :
return (s and (s[0]==p[0] or p[0]=="."))and self.ismatch(s[1:],p[1:])
正規表示式 匹配
字串 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 均不匹配 解法 首先要想到用遞迴處理...
正規表示式匹配
請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 ab ac a 匹配,但是與 aa.a 和 ab a 均不匹配 class solutio...