既然题目要求时间复杂度为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));
    }
}