劍指offer 正規表示式匹配

2021-07-15 06:10:17 字數 1247 閱讀 6690

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

由於只涉及兩種正規表示式的匹配,所以關鍵是需要分清除匹配的所有情況,對於模式串來講,出現了』.』和』『的時候需要單獨考慮,因為兩者的匹配情況是不一樣的。先考慮模式串中有』\『的情況,因為』『可以匹配0個或者多個,所以如果模式串的下乙個字元是』『的時候就有三種情況:1)匹配0個主串的字元,比如主串是abc,模式串是b*的時候,就是這種情況,那麼下一步的匹配策略是主串保持不變,模式串跳到下兩個字元重新比較;2)匹配1個字元,比如主串是abc,模式串是a*就是這種情況,因為只匹配到了a這乙個字元。這種情況的下一步的比較策略應該是主串跳到下乙個字元,模式串移動兩個位置;3)匹配多個字元,比如主串是aac,模式串是a*cb就匹配到了aa這兩個字元,那麼這種情況下下一步的匹配策略應該是主串移動乙個字元,模式串移動兩個位置;如果當前的字元與主串的字元不能匹配,則主串保持不變,模式串移動兩個位置。如果當前字元是』.』的話,直接逐個字元進行比較就行了。

public

class

solution

private

boolean matchregcore(char str, int i, int length1,

char pattern, int j, int length2)

if (i != length1 && j == length2)

return

false;

/** 1、模式串的當前字元匹配到0個字元,則主串不變,模式穿移動到兩個字元

* 2、模式穿的當前字元匹配到1個字元,則主串移動乙個位置,模式串移動兩個位置

* 3、模式串的當前字元匹配到多個字元,則主串移動乙個位置,模式串移動兩個位置。 1.2 如果不能匹配的話: 主串不變,模式串移動兩個位置;

* 二、如果下乙個字元不是*,則進行逐個字元進行匹配 三、如果模式串的下乙個字元是.,則就進行乙個字元的匹配

*/if (j + 1

< length2 && pattern[j + 1] == '*') else

}if (i < length1 && (str[i] == pattern[j] || pattern[j] == '.'))

return

false;

}}

劍指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 均不匹配.分析 觀察模式串中第...

劍指offer 正規表示式匹配

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