登录
|
注册
公司
标签
文章
搜索
经典指数
迅雷
字符串
类别
公司
职位
年份
其他
添加
原因
删除
1533
浏览数
0
收藏数
一个长度为10000的字符串,写一个算法,找出最长的重复子串,如abczzacbca,结果是bc。
还没有评论
分享到:
举报
纠错
0
/
512字
选择纠错区域
题目内容有错
题目标签有错
提交纠错
切换
提交评论
请先
登录
后评论.
1 个答案
0
0
利用后缀数组。首先输入一个字符串到数组arr中,例如“ abczzacbca ”,读入时我们队指针的数组进行初始化,使得每个元素指向输入字符串的相应字符,则元素arr[0]指向整个字符串,下一个元素指向从第二个字符开始的数组后缀,等等。对于前面的输入字符串,该数组能够表示下面这些后缀: arr[0]=abczzacbca arr[1]=bczzacbca arr[2]=czzacbca arr[3]=zzacbca arr[4]=zacbca arr[5]=acbca arr[6]=cbca arr[7]=bca arr[8]=ca arr[9]=a 如果某个长字符串在数组中出现两次,那么它将出现在两个不同的后缀中,因此我们对数组排序以寻找相同的后缀,下面将上面的数组进行数组排序,结果如下 arr[0]=a arr[1]=abczzacbca arr[2]=acbca arr[3]=bca arr[4]=bczzacbca arr[5]=ca arr[6]=cbca arr[7]= czzacbca arr[8]= zacbca arr[9]=zzacbca 然后我们就可以扫描数组,通过比较相邻元素来找出最长的重复字串,如上为"bc" java coder 如下: import java.util.*; public class LongestSameSubString { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner in = new Scanner(System.in); while (in.hasNext()) { String str = in.nextLine(); String[] strArr = new String[str.length()]; for (int i = 0; i < str.length(); i++) { strArr[i] = str.substring(i); } Arrays.sort(strArr); int maxlen = -1; int maxi = 0; int len = 0; for (int i = 0; i < strArr.length - 1; i++) { len = commonSubStrLen(strArr[i], strArr[i + 1]); if (len > maxlen) { maxlen = len; maxi = i; } } if (maxlen==-1) { maxlen=0; } System.out.printf("%s\n", strArr[maxi].substring(0, maxlen)); } in.close(); } static int commonSubStrLen(String str1, String str2) { int maxLen = 0; int index = 0; int len = str1.length() > str2.length() ? str2.length() : str1.length(); while (index < len && (str1.charAt(index) == str2.charAt(index++))) { maxLen++; } return maxLen; } }
还没有评论
举报
切换
提交评论
请先
登录
后评论.
撰写答案
提交回答
通往牛逼的路上,请先登录!
扫描后移动端查看本题
我也分享一个题目
相关题目
对于一个字符串,请设计一个高效算法,计算其中最长回文子串的长度。 ...
对于一个字符串,请设计一个高效算法,找到第一次重复出现的字符。 ...
对称子字符串的最大长度 题目:输入一个字符串,输出该字符串 ...
找出字符串中第一次出现一次的字符的算法。
长度为N(N很大)的字符串,求字符串中的最大回文字串
KMP算法下,长为n的字符串中匹配长度为m的子串的复杂度为() ...
长为N的字符串中匹配长度为M的子串的算法复杂度是多少? O(N ...
给两个字符串,输出其最长共同字符串的长度:如 S1: asdfg ...
输入字符串中对称的子字符串的最大长度。比如输入字符串“roorl ...
有一个排过序的字符串数组,但是其中有插入了一些空字符串,请设计一 ...
×
登录
注册
找回密码
记住登录
登录
快速注册
直接第三方登录
×
保存答案