题解 | #最长重复子串#
最长重复子串
http://www.nowcoder.com/practice/4fe306a84f084c249e4afad5edf889cc
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param a string字符串 待计算字符串
* @return int整型
* @desc 两个长度相同且相邻的窗口去截取字符串,比较两个字符串内容,(如果没有相同字符串)每次向右滑动窗口
*/
public int solve (String a) {
char[] aChar = a.toCharArray();
int tabSize = aChar.length/2;
//从最大窗口开始,比较两个窗口字符串数组
for(;tabSize>0;tabSize--){
//窗口可滑动次数为字符串数组长度减去(窗口长度*2),变化项为窗口左侧起始位置,每次滑动一格
for(int tabSlide=0;tabSlide<=aChar.length-tabSize*2;tabSlide++){
int compareSize = 0;
//如果两个窗口对应字符串相同,直接返回长度
if(compareTabString(aChar,tabSlide,tabSize)){
return tabSize*2;
}
}
}
//没有
return 0;
}
//比较两个窗口字符串的函数(相同则返回true作为判断重复子串的标准)
public boolean compareTabString(char[] a,int tabIndex,int tabSize){
for(int i=tabIndex;i<tabIndex+tabSize;i++){
if(a[i]!=a[i+tabSize])
return false;
}
return true;
}
}

