最近刷面經 遇到一道題,找出字符串中最長的重複子串
對這道題最簡單的方法就是 尋求出串的每個後綴子串 再對其進行排序 再進行遍歷
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));
}
}