萬用字元匹配問題

2021-10-07 18:54:26 字數 1192 閱讀 9484

給定乙個字串 (s) 和乙個字元模式 § ,實現乙個支援 『?』 和 『*』 的萬用字元匹配。

『?』 可以匹配任何單個字元。

『*』 可以匹配任意字串(包括空字串)。

說明:

s 可能為空,且只包含從 a-z 的小寫字母。

p 可能為空,且只包含從 a-z 的小寫字母,以及字元 ? 和 *。

輸入:s = 「adceb」

p = 「ab」

輸出: true

解釋: 第乙個 『』 可以匹配空字串, 第二個 '』 可以匹配字串 「dce」.

輸入:s = 「acdcb」

p = 「a*c?b」

輸出: false

class

solution

else

if(jcharat

(j)==

'*')

else

if(istart>-1

)else

}//s中的字元都判斷完畢,則認為s為空,此時需要p為空或者p中只剩下星號的時候,才能成功匹配。

//如果p中剩餘的都是*,則可以移除剩餘的*

while

(jcharat

(j)==

'*')j++

;return j==plen;

}/**

總結 jstart、istart 分別記錄的是p中 *的下標位置、 以及對應的s的下標位置(即當p中指標指到*時,s的指標位置)

因為 *可以匹配任意字元,包括空字元 那麼就先讓 *匹配空字元

此時 p中的指標位置位於*的後一位,s中的指標位置就是剛才istart指標的位置

然後開始進行匹配,如果不匹配 則

p中的指標仍然回到*的後一位,而s中的指標位置+1(這是關鍵:這就代表著+1前s那個位置的字元就被當作是被*給匹配了)

然後 讓*的後一位繼續 與 s中+1位置的那個位置 匹配

以上是關鍵點、關鍵思路 其它細節 自己具體分析。

比如

s : a b c d e f g h p : a b * ? f g h

p : a b * ? f g h

核心思路:

找到p中 *號的位置、以及*號即將要匹配的s中的那個字元的位置。 即 jstart、istart才是關鍵

*/}

萬用字元匹配

implement wildcard pattern matching with support for and matches any single character.matches any sequence of characters including the empty sequence ...

萬用字元匹配

給定乙個輸入字串s 和模式p,p包含萬用字元?與星號 其中輸入s包含小寫字母a z,p包含小寫字母a z與?和星號,可以匹配任一字元,星號 可以匹配多個字元,包括空字元。給定輸入s與p,判斷s 與 p是否完全匹配。example 1 input s aa p a output false expla...

萬用字元匹配

1.遇到s和p都是 則直接返回true 2.判斷邊界條件如果s串已經遍歷完畢,則判斷p串是否便利完畢,如果p串長度大於s串,則判斷大於部分是否都是 如果是則返回true,否則返回false 3.判斷邊界條件如果p串已經便利完畢,則判斷s串是否便利完畢,是則返回true,否則返回false 4.判斷字...