1
var findSubstring = function (s, words) {
2
let res = [];
3
let wordLength = words[0].length;
4
let wordCount = words.length;
5
let len = wordCount * wordLength; //Length of sliding window
6
let map = {};
7

8
for (let word of words) map[word] = map[word] + 1 || 1; //Hash word freq
9

10
for (let i = 0; i < s.length - len + 1; i++) {
11
let sub = s.slice(i, i + len); //Generate substring of sliding window length
12
if (isConcat(sub, map, wordLength)) res.push(i);
13
}
14

15
return res;
16
};
17

18
function isConcat(sub, map, wordLength) {
19
let seen = {};
20
for (let i = 0; i < sub.length; i += wordLength) {
21
let word = sub.slice(i, i + wordLength);
22
seen[word] = seen[word] + 1 || 1;
23
}
24

25
for (let key in map) {
26
if (map[key] !== seen[key]) return false; //Word freq must match between map and seen
27
}
28
return true;
29
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0