includes()
и
indexOf()
каждый раз, считайте, пробегают, в среднем, по полстроки.
Представьте, что там дико длинные строки, гигабайтные.
Поэтому алгоритм желательно построить так, чтобы по каждой Войне и Миру пройтись 1 раз или меньше.
Условие хорошо сужает возможные символы до всего 26 букв латинского алфавита
a..z
Рабочее решение под
спойлером
Например, можно создать массив из 26 счётчиков и заполнять их из первой строки и опустошать из второй.
Вот такое моё решение прошло тест:
function scramble(str1, str2) {
if (str1.length < str2.length) return false;
const a = Array(26).fill(0);
for (let c of str1) a[c.charCodeAt(0) - 97]++;
for (let c of str2) a[c.charCodeAt(0) - 97]--;
for (let n of a) if (n < 0) return false;
return true;
}
* 97 это ASCII-код маленькой латинской "a"