跳到主要内容

1044.最长重复子串

链接:1044.最长重复子串
难度:Hard
标签:字符串、二分查找、后缀数组、滑动窗口、哈希函数、滚动哈希
简介:返回 任意一个 可能具有最长长度的重复子串。如果 s 不含重复子串,那么答案为 "" 。

题解 1 - typescript

  • 编辑时间:2021-12-23
  • 执行用时:9236ms
  • 内存消耗:60.3MB
  • 编程语言:typescript
  • 解法介绍:二分答案。
function check(s: string, n: number, num: number): string {
let left = 0;
let right = num;
let str = s.substring(left, right);
const set = new Set([str]);
while (right < n) {
str = s.substring(++left, ++right);
if (set.has(str)) return str;
set.add(str);
}
return '';
}
function longestDupSubstring(s: string): string {
const n = s.length;
let left = 0;
let right = n;
let ans = '';
while (left < right) {
const mid = (left + right + 1) >> 1;
const str = check(s, n, mid);
if (str === '') right = mid - 1;
else {
left = mid;
ans = str;
}
}
return ans;
}