1
var findSubstring = function (s, words) {3
let wordLength = words[0].length;4
let wordCount = words.length;5
let len = wordCount * wordLength; //Length of sliding window8
for (let word of words) map[word] = map[word] + 1 || 1; //Hash word freq10
for (let i = 0; i < s.length - len + 1; i++) {11
let sub = s.slice(i, i + len); //Generate substring of sliding window length12
if (isConcat(sub, map, wordLength)) res.push(i);18
function isConcat(sub, map, wordLength) {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;25
for (let key in map) {26
if (map[key] !== seen[key]) return false; //Word freq must match between map and seen