Skip to content

Code:

js
/**
 * @param {string} s
 * @param {string[]} wordDict
 * @return {boolean}
 */
var wordBreak = function(s, wordDict) {
    const tree = {}

    for (const word of wordDict) {
        let t = tree

        for (const w of word) {
            if (!t[w]) {
                t[w] = {}
            }

            t = t[w]
        }

        t.isWord = true
    }

    const dfs = (t, i = 0) => {
        if (i >= s.length - 1) {
            return !!t.isWord
        }

        if (!t[s[i]]) {
            return false
        }

        if (t[s[i]].isWord) {
            return true
        }

        const bool = []
        const temp = t

        for (let j = i + 1; j < s.length; j++) {
            bool.push(dfs(t[s[i]], j))
        }

        return bool.some(Boolean)
    }

    return dfs(tree)
};

// 暴力破解
var wordBreak = function(s, wordDict) {
    let length = s.length

    if (length < 2) {
        return wordDict.includes(s)
    }

    let strLength = Number.MAX_SAFE_INTEGER
    for (const w of wordDict) {
        strLength = Math.min(w.length, strLength)
    }

    if (length < strLength) {
        return false
    }

    let string = [true]

    for (let i = 0; i < length; i++) {
        if (length - i < strLength) {
            return !!string[length]
        }

        for (let j = i + strLength; j <= length; j++) {
            if (string[i] && wordDict.includes(s.substring(i, j))) {
                string[j] = true
            }         
        }
    }

    return !!string[length]
}


console.log(wordBreak("leetcode",["leet","code"]))

❤ With Algorithm