找最长连续重复字母子串

求一个字符串中最长的连续重复字母子串?要点:最长的,重复的。子串中的重复数目至少为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]={a,s,d,k,d,n,a,s,d,a}
遍历temp[1]获得重复数int[] nums为{3,2,3,1,3,1,3,2,3,3} 此时 最大重复数为nummax=3 result="a"
依次遍历 temp[2],temp[3],... 如果有重复的,num[x]>=2 那么子字母串肯定比前面找到的长。



posted @ 2020-04-27 10:09  ~gcc~  阅读(169)  评论(0编辑  收藏  举报