给定一个字符串 (s) 和一个字符模式 § ,实现一个支持 ‘?’ 和 ‘ ’ 的通配符匹配。
‘?’ 可以匹配任何单个字符。
'’ 可以匹配任意字符串(包括空字符串)。
两个字符串完全匹配才算匹配成功。
说明:
s 可能为空,且只包含从 a-z 的小写字母。
p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。
思路
https://leetcode.com/problems/wildcard-matching/discuss/17810/Linear-runtime-and-constant-space-solution
解法-贪心
执行用时 :3 ms, 在所有 Java 提交中击败了99.53%的用户
内存消耗 :38.4 MB, 在所有 Java 提交中击败了34.72%的用户
class Solution {
public boolean isMatch(String s, String p) {
int i = 0, j = 0, match = 0, starIdx = -1;
while (i < s.length()){
// advancing both pointers
if (j < p.length() && (p.charAt(j) == '?' || s.charAt(i) == p.charAt(j))){
i++;
j++;
}
// * found, only advancing p pointer
else if (j < p.length() && p.charAt(j) == '*'){
starIdx = j;
match = i;
j++;
}
// last p pointer was *, advancing string pointer
else if (starIdx != -1){
j = starIdx + 1;
match++;
i = match;
}
//current p pointer is not star, last patter pointer was not *
//characters do not match
else {
return false;
}
}
//check for remaining characters in p
while (j < p.length() && p.charAt(j) == '*'){
j++;
}
return j == p.length();
}
}