Skip to content

Code:

js
/**
 * @param {string} s
 * @param {string[]} words
 * @return {number[]}
 */
var findSubstring = function(s, words) {
    const count = {}
    const indexes = []
    const wLen = words[0].length
    const wordLen = words.length * wLen
    let length = words.length

    const equal = target => {
        for (const k in count) {
            if (count[k] !== target[k]) {
                return false
            }
        }

        return true
    }

    for (const w of words) {
        count[w] =  !count[w] ? 1 : ++count[w]
    }

    for (let i = 0, j = wordLen - 1; j < s.length; j++, i++) {
        const m ={}
        let l = length

        while(l--) {
            const string = s.substring(l * wLen + i, (l + 1) * wLen + i)

            if (!count[string]) {
                break;
            }

            m[string] = !m[string] ? 1 : ++m[string]
        }

        l === -1 && equal(m) && indexes.push(i)
    }

    return indexes
};

console.log(findSubstring("wordgoodgoodgoodbestword", ["word","good","best","word"]))
console.log(findSubstring("barfoothefoobarman", ["foo","bar"]))
console.log(findSubstring("barfoofoobarthefoobarman", ["bar","foo","the"]))

❤ With Algorithm