38.通配符匹配

題目描述:

在這裏插入圖片描述

代碼實現:

  • 回溯法,本題主要的難點在於如何解決’‘的問題,由於’‘可以匹配任意長度的字符串,那麼我們就可以通過記錄‘’的位置通過回溯的方法來解決這個問題,先讓 ‘’匹配 0 個字符,如果匹配 0 個字符不成功,則根據之前記錄的 sStarIdx 和 pStarIdx 回溯到這個地方,再讓‘*’匹配 1 個字符,如果匹配 1 個字符也不成功,則繼續回溯回來,匹配 2 個字符,以此類推。
  • 時間複雜度:O(min(S,P))
/**
 * @param {string} s
 * @param {string} p
 * @return {boolean}
 */
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
};

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章