44. 萬用字元匹配
阿新 • • 發佈:2019-01-05
給定一個字串 (s
) 和一個字元模式 (p
) ,實現一個支援 '?'
和 '*'
的萬用字元匹配。
'?' 可以匹配任何單個字元。 '*' 可以匹配任意字串(包括空字串)。
兩個字串完全匹配才算匹配成功。
說明:
s
可能為空,且只包含從a-z
的小寫字母。p
可能為空,且只包含從a-z
的小寫字母,以及字元?
和*
。
示例 1:
輸入: s = "aa" p = "a" 輸出: false 解釋: "a" 無法匹配 "aa" 整個字串。
示例 2:
輸入: s = "aa" p = "*" 輸出: true 解釋: '*' 可以匹配任意字串。
示例 3:
輸入:s = "cb" p = "?a" 輸出: false 解釋: '?' 可以匹配 'c', 但第二個 'a' 無法匹配 'b'。
示例 4:
輸入: s = "adceb" p = "*a*b" 輸出: true 解釋: 第一個 '*' 可以匹配空字串, 第二個 '*' 可以匹配字串 "dce".
示例 5:
輸入: s = "acdcb" p = "a*c?b" 輸入: false
class Solution {
public:
bool isMatch(string s, string p) {
int m=s.length();int n=p.length();
int i=0,j=0,match,asterisk = -1;
while(i<m){
if(j<n&&p[j]=='*'){
match=i;
asterisk=j++;
}
else if(j<n&&(s[i]==p[j]||p[j]=='?')){
i++;j++;
}
else if(asterisk>=0){
i=++match;
j=asterisk+1;
}
else return false;
}
while(j<n&&p[j]=='*')j++;
return j==n;
}
};