既然题目要求时间复杂度为O(n^2),那么直接套用双重循环:外层循环i为假定起始重复子串的初始位置,内层循环的j为假定重复子串的结束位置。注意,如果j-i为奇数,那么不可能是重复子串,因此,每次把j的下标增加2。由于我们是假定从i到j的子串为重复子串,因此我们需要去验证,验证很简单,就是从中间截断,看前后两个串是否equals,如果是重复子串,则直接更新最大长度即可。
public class Solution {
public int solve (String a) {
int maxlen = 0;
for(int i=0;i<a.length();i++){
for(int j=i;j<=a.length();j+=2){
if(judge(a.substring(i,j))){
maxlen = Math.max(maxlen,j-i);
}
}
}
return maxlen;
}
public boolean judge(String s){
if(s.length()%2==1)return false;
return s.substring(0,s.length()/2).equals(s.substring(s.length()/2));
}
}