给定一个字符串,寻找其最长重复子串,例如「abbaba」最长重复子串为 ab。
思路:由于最长重复子串的长度,不超过原字符串的长度的一半,所以从字符串的一半开始计算,将源字符串分为两部分,左边一部分为样品 sample,右边一部分为寻找子串left,如果左边寻找子串包含了 left ,那么将返回这个最长重复子串。
public static String longestRepeatingSubstring(String str) {
int len = str.length();
String sample,left;
for(int i = len/2;i >= 0;--i) {
for(int j = 0;j < len-i;j+=i) {
sample = str.substring(j, i);
left = str.substring(i);
if(left.indexOf(sample) != -1) return sample;
}
}
return null;
}