可以将两个字符串想像成两个连续的滑动窗口,并假设这个滑动窗口最大是字符串长度的一半,通过比较两个窗口的内容是否相同,不相同的时候不断从左向右平移,完了之后,还是不相同,这时候就将窗口的大小调小一点,直到找到一个相同的,这个时候窗口的长度×2就是最大字符串的大小
public int solve (String a) {
// write code here
if (a == null || a.length() <= 1) return 0;
char[] chars = a.toCharArray();
int len = chars.length;
int maxLen = chars.length / 2;
for (int i = maxLen; i >= 1;--i){
for (int j = 0; j <= len - 2 * i;++j){
if (check(chars, j, i))
return 2 * i;
}
}
return 0;
}
public boolean check(char[] chars, int start, int len){
for (int i = start;i < start + len;++i){
if (chars[i] != chars[i +len])
return false;
}
return true;
}
京公网安备 11010502036488号