劍指Offer 正規表示式匹配

2021-10-24 07:59:33 字數 773 閱讀 6319

方法:有兩個指標s和p,s指向字串,p指向模式

1.首先我們分析出現'.'的情況,從題目中可以知道,這個符號可以代表任意乙個字元,也就是這兩個指標同時後移一位(或者是這兩個字元相等)

2.當出現'*'的時候:

(1)當s和p相等(注意這個相等),p+1是『*』的時候,會出現三種情況:

a.模式不變(也就是指標p不變),s向後移動一位。比如abbcd和ab*cf,其中s和p都指向了b。由於b出現了多次,應該不著急移動p,所以此時s+1即可。

b.忽略這個『*』,p向後移動兩位,s向後移動一位。比如abcd和ab*cf,其中s和p都指向了b。此時應該s+1和p+2

c.忽略這個'*』,p向後移動兩位,s不變。比如"cba","cb*a*a",我也可以認為,p指向的第1個a沒出現過,即使你相等。因此此時可以s不動,p+2(也就是直接跳到最後比較)。

(2)當s和p不相等的時候,p+1是『*』的情況,相當於這個沒出現,p向後移動兩位。

由於把真正的相等和'.'標記的相等並成一類,就只用考慮'*'。如果不出現星號,就常規比較,常規比較肯定出現相等或者不等兩類。如果出現星號,就考慮兩個指標指的是否相等,不等,則p指標直接+2。兩個指標相等,則有3種情況並列處理。再在這些判斷中,加入對應邊界條件,就可以很容易理解並寫出**了。

public class solution

return match(str,0,pattern,0);

}public boolean match(char str,int s,char pattern,int p)

if(s

劍指offer 正規表示式匹配

請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 abaca 匹配,但是與 aa.a 和 aba 均不匹配 由於只涉及兩種正規表示式的匹配,...

劍指Offer 正規表示式匹配

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

劍指offer 正規表示式匹配

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