劍指offer 解題系列(53) 正規表示式匹配

2021-08-02 08:24:45 字數 774 閱讀 7782

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

基本的函式使用遞迴,在函式呼叫過程中,總共可分為以下幾種情形:

假設目標字串 是 str ,匹配字串是 pattern

1、如果pattern第二個字元不是 『*』,那麼只要對比下第乙個字元,然後遞迴比對後續字元,即str+1 和 pattern+1

2、如果第二個字元是'*',那麼

(1)如果pattern和str第乙個字元相同,以下兩種情況滿足一種即可

一、 遞迴比對pattern+2後續字元,即str 和 pattern+2

二、 遞迴比對str+1後續字元,即str+1 和 pattern

(2)如果pattern和str第乙個字元不相同,也就是使用*作為取消字元用,

遞迴比對pattern後續字元,即str 和 pattern+2

另外需要特殊處理字元長度只有1的情形

bool match(char* str, char* pattern )

}  if( strlen(pattern)==1 )

if(pattern[1]=='*') 

return res; } 

else

return match(str,pattern+2 ); }

else }

劍指offer 解題系列(17) 樹的子結構

輸入兩棵二叉樹a,b,判斷b是不是a的子結構。ps 我們約定空樹不是任意乙個樹的子結構 分析 b是a的子結構分為幾種情況 1 b是空或者a是空,直接false 2 b的根節點與a的根節點相等,而且左右子樹都相同 3 b的根節點和a不等,但是a的左子樹或者右子樹和b相同 所以可以先設定遞迴函式為判斷是...

劍指offer 解題系列(45) 翻轉單詞順序列

牛客最近來了乙個新員工fish,每天早晨總是會拿著一本英文雜誌,寫些句子在本子上。同事cat對fish寫的內容頗感興趣,有一天他向fish借來翻看,但卻讀不懂它的意思。例如,student.a am i 後來才意識到,這傢伙原來把句子單詞的順序翻轉了,正確的句子應該是 i am a student....

劍指offer 解題系列(46) 撲克牌順子

ll今天心情特別好,因為他去買了一副撲克牌,發現裡面居然有2個大王,2個小王 一副牌原本是54張 他隨機從中抽出了5張牌,想測測自己的手氣,看看能不能抽到順子,如果抽到的話,他決定去買體育彩票,嘿嘿!紅心a,黑桃3,小王,大王,方片5 oh my god 不是順子.ll不高興了,他想了想,決定大 小...