求一个字符串中最长的连续重复字母子串?要点:最长的,重复的。子串中的重复数目至少为2!
代码实例:
/**
* 求字符串中最长重复子串
*/
public class MaxStr {
public static String getMaxString(String str){
String result = "";
/**
* 对传入的数据进行处理
*/
int i=1;//从子字符串的长度为:1,2,3,4......str.len-1;
int nummax = 0;
for (; i < str.length(); i++) {
//对子字符串长度为1,2,3,4,....str.len-1的子串集进行分析
//保存当前长度为i的子串集合
String[] temp = new String[str.length()-(i-1)];
//对每一个子字符串 建立一个变量保存其重复数
int[] nums = new int[str.length()-(i-1)];
for (int j = 0; j < temp.length ; j++) {
temp[j]= str.substring(j,j+i);
System.out.print(temp[j]+" ");
}
//求出子串集中重复的子串的数
System.out.println();
for (int j = 0; j < temp.length ; j++) {
nums[j]=0;//初始值为1
for (int k = 0; k < temp.length; k++) {
if(temp[j].equals(temp[k])){
nums[j]++;
}
}
System.out.print(nums[j]+" ");
if(nums[j]>=2){
nummax = nums[j];
result = temp[j];
}
}
System.out.println();
/**
* a,s,d,k,d,n,a,s,d,a,
* as,sd,dk,kd,dn,na,as,sd,da,
* asd,sdk,dkd,kdn,dna,nas,asd,sda,
* asdk,sdkd,dkdn,kdna,dnas,nasd,asda,
* asdkd,sdkdn,dkdna,kdnas,dnasd,nasda,
* asdkdn,sdkdna,dkdnas,kdnasd,dnasda,
* asdkdna,sdkdnas,dkdnasd,kdnasda,
* asdkdnas,sdkdnasd,dkdnasda,
* asdkdnasd,sdkdnasda,
*/
//每一个子串集中 每一个元素对应的个数
}
return result;
}
public static void main(String[] args) {
String result = getMaxString("asdkdnasda");
System.out.println("测试结果如下:"+result);
}
}
运行结果和答案如下:
a s d k d n a s d a
3 2 3 1 3 1 3 2 3 3
as sd dk kd dn na as sd da
2 2 1 1 1 1 2 2 1
asd sdk dkd kdn dna nas asd sda
2 1 1 1 1 1 2 1
asdk sdkd dkdn kdna dnas nasd asda
1 1 1 1 1 1 1
asdkd sdkdn dkdna kdnas dnasd nasda
1 1 1 1 1 1
asdkdn sdkdna dkdnas kdnasd dnasda
1 1 1 1 1
asdkdna sdkdnas dkdnasd kdnasda
1 1 1 1
asdkdnas sdkdnasd dkdnasda
1 1 1
asdkdnasd sdkdnasda
1 1
测试结果如下:asd
分析:遍历时,将字符串安装长度为1,2,3......str.lenth()-1 分割,如当长度为1时,得到的结果为。temp[1]=