最近刷面经 遇到一道题,找出字符串中最长的重复子串
对这道题最简单的方法就是 寻求出串的每个后缀子串 再对其进行排序 再进行遍历
longest函数返回最长子串
lenTwoStr求出两个串共同部分的长度
代码如下
import java.util.Arrays;
public class LongestDupStr {
public String Longest(String str)
{
int len=str.length();
String result="";
int maxLen=0;
if(len<=1)
return "";
String[] strs=new String[len];
for(int i=0;i<len;i++)
{
strs[i]=str.substring(i,len);
}
Arrays.sort(strs);
for(int i=0;i<len-1;i++)
{
int tmp=lenTwoStr(strs[i],strs[i+1]);
if(tmp>maxLen) {
maxLen=tmp;
result=strs[i].substring(0,maxLen);
}
}
return result;
}
public int lenTwoStr(String str1,String str2)
{
if(str1.length()==0||str2.length()==0)
return 0;
int i=0;
while(i<str1.length()&&i<str2.length()&&str1.charAt(i)==str2.charAt(i))
i++;
return i;
}
public static void main(String[] args) {
LongestDupStr lg=new LongestDupStr();
String tmp="abcabc";
System.out.println(lg.Longest(tmp));
}
}