# 1062.Longest-Repeating-Substring

## ้ข็ฎๅฐๅ

https://leetcode.com/problems/longest-repeating-substring/

## ้ข็ฎๆ่ฟฐ

``````Given a string S, find out the length of the longest repeating substring(s). Return 0 if no repeating substring exists.

Example 1:
Input: "abcd"
Output: 0
Explanation: There is no repeating substring.

Example 2:
Input: "abbaba"
Output: 2
Explanation: The longest repeating substrings are "ab" and "ba", each of which occurs twice.

Example 3:
Input: "aabcaabdaab"
Output: 3
Explanation: The longest repeating substring is "aab", which occurs 3 times.

Example 4:
Input: "aaaaa"
Output: 4
Explanation: The longest repeating substring is "aaaa", which occurs twice.

Note:

The string S consists of only lowercase English letters from 'a' - 'z'.
1 <= S.length <= 1500``````

## ไปฃ็ 

### Approach #1 Binary Search + HashSet

``````class Solution {
public int longestRepeatingSubstring(String S) {
int n = S.length();
int left = 1;
int right = n;
int L;
while (left <= right) {
L = left + (right - left) / 2;
if (search(L, n, S) == -1) {
right = L - 1;
} else {
left = L + 1;
}
}

return left - 1;
}

private int search(int L, int n, String S) {
HashSet<String> seen = new HashSet();
String tmp;
for (int start = 0; start < n - L + 1; start++) {
tmp = S.substring(start, start + L);
if (seen.contains(tmp))        return start;
seen.add(tmp);
}
return -1;
}
}``````

Last updated