🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
给定一个字符串 **小号 **和一些长度相同的单词 **词。**找出**小号**中恰好可以由 **词**中所有单词串联形成的子串的起始位置。 注意子串要与 **词**中的单词完全匹配,中间不能有其他字符,但不需要考虑 **的话 **中单词串联的顺序。 **示例1:** ~~~ 输入: s = “barfoothefoobarman”, words = [“foo”,“bar”] 输出:[0,9] 解释: 从索引0和9开始的子串分别是“barfoor”和“foobar”。 输出的顺序不重要,[9,0]也是有效答案。 ~~~ **示例2:** ~~~ 输入: s = “wordgoodgoodgoodbestword”, words = [“word”,“good”,“best”,“word”] 输出:[] ~~~ ``` /** * @param {string} s * @param {string[]} words * @return {number[]} */ var findSubstring = function(str, words) { if (!words || !words.length) return[]; let wordLen = words[0].length; let allWordsLen = wordLen * words.length; let ans = [], wordMap = {}; for (let w of words) { wordMap[w] ? wordMap[w]++ :wordMap[w] = 1 } for (let i = 0; i < s.length - allWordsLen + 1; i++) { let wm = Object.assign({}, wordMap); for (let j = i; j < i + allWordsLen - wordLen + 1; j += wordLen) { let w = s.slice(j, j + wordLen); if (wm[w]) { wm[w]-- } else { break; } } if (Object.values(wm).every(n => n === 0)) ans.push(i); } return ans; } ```