题目:
给一个字符串,求该字符串的最长重复子串,子串可以包含重叠部分
示例:
输入:"abcdabcd"
输出:"abcda"
思路:求重复子串关键问题是少不了遍历该字符串和进行字符之间的比较,关键问题是在遍历的过程中怎么进行字符的比较。 可以使用这样的方法进行遍历,形象的描述为,可以使用一个尺子(可以类比为滑动窗口)但是只比较尺子两端的字符是否相等,依次从左向右滑动,滑动的过程中比较尺子两端的字符是否相等并且更新字符串的最大长度以及字符串的起始下标,并且这把尺子的大小的取值依次为:1 至 str.length-1。
实现如下:
public class pro10_15_16 {
public static String getRepeatStr(String str){
//处理为空情况
if(str==null || str.length()<1){
return null;
}
//maxi:最长重复子串的起始下标,maxlen:最长重复子串的最大长度,len:当前重复子串的最大长度
int maxi=0,maxlen=0,len=0;
//外层循环控制这把尺子(或者说是滑动窗口)的大小,取值从1开始到str.length-1
for(int i=1;i<str.length();i++){
//内层循环遍历该字符串
for(int j=