给你一个字符串 s ,考虑其所有 重复子串 :即 s 的(连续)子串,在 s 中出现 2次或更多次。这些出现之间可能存在重叠。
返回 任意一个 可能具有最长长度的重复子串。如果 s 不含重复子串,那么答案为 “” 。
示例 1:
输入:s = "banana"
输出:"ana"
示例 2:
输入:s = "abcd"
输出:""
提示:
看到 最长, 最多, 最少, 最…, 一定要首要想到 二分
[1, N-1]calc( x)为: 是否存在长度为x的重复子串>=, 并没有一个直接的具体的确切的算法可以处理, 还得进行拆分子问题. 因为>=x, 可能是x, x+1, x+2, ...很多情况.=, 则算法为: O(n)扫描所有长为K的子串, 看有没有相同的. 这个问题定义是清晰的 是确切的ULL的数, 放到set集合里, 然后去询问set集合)calc = false, x > anscalc = true, x = anscalc = true, x < ans (这里很重要! 比如答案是abc 和 abc, 则ab 和 ab也是, a 和 a也是)calc = false, x > anscalc = true, x <= ansif( calc( mid) = true)){ l = mid;