Неоптимально в лоб можно так:
подбирать число возможных повторов: от 2 до длины строки, и должно делиться без остатка.
-- на каждом проверять: брать подстроку и сравнивать с остальными той же длины
-- найденный повтор запоминать, затирая предыдущий найденный, если был.
вернуть либо последний (значит, самый короткий) найденный повтор, либо исходную строку.
spoilerfunction noRepeats(str) {
const length = str.length;
let result;
search:
for (let i = 2; i < length; i++) {
if (length % i) continue;
const slen = length / i;
const sample = str.substr(0, slen);
for (let j = 1; j < i; j++) {
if (sample !== str.substr(j * slen, slen))
continue search;
}
result = sample;
}
return result.length ? result : str;
}