header-icon
function isMatch(s, p) {
let i = 0; // s的指针
let j = 0; // p的指针
let starIndex = -1; // *号的位置
let sIndex = -1; // s中*号匹配到的位置
while (i < s.length) {
// 如果p中的字符和s中的字符相等,或者p中的字符为?,则指针同时后移
if (j < p.length && (p[j] === '?' || s[i] === p[j])) {
i++;
j++;
// 如果p中的字符为*,则记录*号的位置,并且s的指针后移
} else if (j < p.length && p[j] === '*') {
starIndex = j;
sIndex = i;
j++;
// 如果字符不匹配,并且之前有*号,则s的指针回到*号匹配到的位置,p的指针回到*号的下一个位置
} else if (starIndex !== -1) {
j = starIndex + 1;
i = sIndex + 1;
sIndex++;
// 如果字符不匹配,并且之前没有*号,则返回false
} else {
return false;
}
}
// 如果p中有剩余字符,则判断剩余字符是否全为*号,如果全为*号,则返回true,否则返回false
while (j < p.length && p[j] === '*') {
j++;
}
return j === p.length;
}
leetcode算法第44题《通配符匹配》解答注释(困难)
于 2023-02-16 17:49:36 首次发布