結尾匹配 萬用字元匹配

2021-10-14 17:44:01 字數 1887 閱讀 8427

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

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

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

兩個字串完全匹配才算匹配成功。

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

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

輸入:s = "aa"

p = "a"輸出:false解釋:"a" 無法匹配 "aa" 整個字串。

輸入:s = "aa"

p = "*"輸出:true解釋:'*' 可以匹配任意字串。

輸入:s = "cb"

p = "?a"輸出:false解釋:'?' 可以匹配 'c', 但第二個 'a' 無法匹配 'b'。

輸入:

s = "adceb"

p = "*a*b"

輸出: true

解釋: 第乙個 '*' 可以匹配空字串, 第二個 '*' 可以匹配字串 "dce".

輸入:s = "acdcb"

p = "a*c?b"輸出:false

首先,我們根據題目的意思,有三種型別的情況出現:

1、小寫字母a-z

2、問號?,可以匹配乙個任意字元

3、星號*,可以匹配任意多個字元

以上型別,其中問號與小寫字母的匹配是固定的,而星號是不確定的,也就是說,乙個*與多個*號連續,其實是等價的,即a*b = a****b

如果p的結尾不是星號,那就必須是由字串s的結尾字元匹配,我們可以不斷匹配s與p的結尾字元,直到p為空,或者p的結尾字元為星號為止,而在這過程中如果匹配失敗或者p為空但s不為空,則返回false

如果p的開始不是星也差不多的意思,不斷匹配p和s的開頭字元。修改srecord與precord的初始值為-1,表示p的開頭字元不是星號,並且在匹配失敗的時候進行判斷,如果它們的值為-1,則返回false

class solution  else 

}if (pright == 0)

// 我們用 sindex 和 pindex 表示當前遍歷到 s 和 p 的位置

// 此時我們正在 s 中尋找某個 u_i

// 其在 s 和 p 中的起始位置為 srecord 和 precord

匹配開頭結尾

字元功能 匹配字串開頭 匹配字串結尾 coding utf 8 import re email list xiaowang 163.com xiaowang 163.comheihei com.xiaowang qq.com for email in email list ret re.match ...

萬用字元匹配

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...