題目描述:
代碼實現:
- 回溯法,本題主要的難點在於如何解決’‘的問題,由於’‘可以匹配任意長度的字符串,那麼我們就可以通過記錄‘’的位置通過回溯的方法來解決這個問題,先讓 ‘’匹配 0 個字符,如果匹配 0 個字符不成功,則根據之前記錄的 sStarIdx 和 pStarIdx 回溯到這個地方,再讓‘*’匹配 1 個字符,如果匹配 1 個字符也不成功,則繼續回溯回來,匹配 2 個字符,以此類推。
- 時間複雜度:O(min(S,P))
var isMatch = function(s, p) {
var sIdx = 0, pIdx = 0, sStarIdx = -1, pStarIdx = -1
while (sIdx < s.length) {
if (pIdx < p.length && (s[sIdx] === p[pIdx] || p[pIdx] === '?')) {
sIdx++
pIdx++
} else if (pIdx < p.length && p[pIdx] === '*') {
sStarIdx = sIdx
pStarIdx = pIdx++
} else if (pStarIdx > -1) {
sIdx = ++sStarIdx
pIdx = pStarIdx + 1
} else {
return false
}
}
while (pIdx < p.length) {
if (p[pIdx++] !== '*') {
return false
}
}
return true
};