const resMap = new Map();
function findRepeatSubString(L, S) {
const n = S.length;
const set = new Set();
for (let i = 0;i < n - L + 1;i++) {
const subString = S.slice(i, i + L);
if (set.has(subString)) {
resMap.set(L, subString);
return i;
}
set.add(subString);
}
return -1;
}
function findLongestRepeatSubString(S) {
let left = 1, right = S.length;
while(left <= right) {
let mid = Math.floor((left + right) / 2);
if (findRepeatSubString(mid, S) !== -1) left = mid + 1;
else right = mid - 1;
}
return resMap.get(left - 1);
}
console.log(findLongestRepeatSubString("abbaba"))
console