Substring with Concatenation of All Words
Description
You are given a string, s, and a list of words, words, that are all of the same length. Find all starting indices of substring(s) in s that is a concatenation of each word in words exactly once and without any intervening characters.
Example 1:
Input:
s = "barfoothefoobarman",
words = ["foo","bar"]
Output: [0,9]
Explanation: Substrings starting at index 0 and 9 are "barfoo" and "foobar" respectively.
The output order does not matter, returning [9,0] is fine too.
Example 2:
Input:
s = "wordgoodgoodgoodbestword",
words = ["word","good","best","word"]
Output: []
Solution(javascript)
/**
* @param {string} s
* @param {string[]} words
* @return {number[]}
*/
var findSubstring = function(s, words) {
if(!words.length) return [];
const wordLen = words[0].length;
const arrLen = words.reduce((acc,element) => acc + element.length, 0);
const re = new RegExp('(.{' + wordLen + '})');
words = words.sort();
function equalArr(arr1, arr2) {
for(let j = 0; j < arr1.length; j++){
if(arr1[j] != arr2[j]) return false;
}
return true;
}
let rst = [];
for(let i = 0; i <= s.length - arrLen; i++) {
const splitArr = s.slice(i, i+arrLen).split(re).filter(O=>O).sort();
if(equalArr(words, splitArr)) rst.push(i);
}
return rst;
};