44. Wildcard Matching
Hard
120177FavoriteShare
Given an input string (s
) and a pattern (p
), implement wildcard pattern matching with support for '?'
and '*'
.
'?' Matches any single character.
'*' Matches any sequence of characters (including the empty sequence).
The matching should cover the entire input string (not partial).
Note:
-
s
could be empty and contains only lowercase lettersa-z
. -
p
could be empty and contains only lowercase lettersa-z
, and characters like?
or*
.
Example 1:
Input:
s = "aa"
p = "a"
Output: false
Explanation: "a" does not match the entire string "aa".
Example 2:
Input:
s = "aa"
p = "*"
Output: true
Explanation: '*' matches any sequence.
Example 3:
Input:
s = "cb"
p = "?a"
Output: false
Explanation: '?' matches 'c', but the second letter is 'a', which does not match 'b'.
Example 4:
Input:
s = "adceb"
p = "*a*b"
Output: true
Explanation: The first '*' matches the empty sequence, while the second '*' matches the substring "dce".
Example 5:
Input:
s = "acdcb"
p = "a*c?b"
Output: false
class Solution {
public:
bool isMatch(string s, string p) {
int SIndex = 0,PIndex = 0,SStart = 0,PStart = 0;
while(SIndex < s.length()){
//--s和p一一匹配
if(s[SIndex] == p[PIndex] || p[PIndex] == '?'){
SIndex++;PIndex++;
}
//--遇到通配符*
else if(p[PIndex] == '*'){
PStart = ++PIndex;
SStart = SIndex;
}
//--s[SIndex] != p[PIndex],并且s[SIndex]前面有通配符*
else if(PStart > 0){
PIndex = PStart;
SIndex = ++ SStart;
}
//--s[SIndex] != p[PIndex],并且s[SIndex]前面没有通配符*
else{
return false;
}
}
while(PIndex < p.length() && p[PIndex] == '*'){
PIndex++;
}
if(PIndex == p.length()){
return true;
}
else{
return false;
}
}
};
标签:SIndex,string,--,通配符,PIndex,Output,字符串,Input,Example From: https://blog.51cto.com/u_13121994/5798289