一个字符在字符串中连续出现的次数最多的子字符串?求算法

比如:Stringstr="aaaaabbbdccccccdegbrs";输出cccccc... 比如:
String str="aaaaabbbdccccccdegbrs";
输出cccccc
展开
 我来答
pplpeter
2012-06-16
知道答主
回答量:8
采纳率:0%
帮助的人:3.8万
展开全部
public void find(String s){
int i = 0;//字符串下标
int j = 1; //记录重复数
int max = 1; //记录最大的重复数
int m = 0; //作为note数组的下标
int note[] = new int[5]; //该数组是记录输出最大重复的子字符串的下标
while(i < s.length() - 1){
if(s.charAt(i) == s.charAt(i+1)){
j = j + 1;

}
else{
if(j == max && j != 1){ //该判断就是为了以防如出现多个最大重复长度的字串,比如aaabbbcc就该有aaa,bbb两个
m++;
note[m] = i - max +1;
}
if(j > max){
max = j;
note[0] = i - max +1;
for(int n = 1; n < note.length; n++){
note[n] = -1; //出现更大的重复字串则将以前记录的小标清除
}
}
j = 1;
}
i++;
}
if(max == 1){
System.out.println("所有字符都只单个出现,并无连续");
return;
}
for(int p = 0; p < note.length; p++){
if(note[p] != -1){
System.out.println(s.substring(note[p], note[p]+max));
}
}

}
不明白就请call我啊,呵呵
追问
你这有问题
输入这个aaaaaaabbbcccccccccccc
输出的是aaaaaaa
追答
public void find(String s){

StringBuffer sb = new StringBuffer(s);
sb.append('%');
int i = 0;//字符串下标
int j = 1; //记录重复数
int max = 1; //记录最大的重复数
int m = 0; //作为note数组的下标
int note[] = new int[20]; //该数组是记录输出最大重复的子字符串的下标
while(i max){

max = j;
note[0] = i - max +1;
for(int n = 1; n < note.length; n++){
note[n] = -1; //出现更大的重复字串则将以前记录的小标清除
}
}
j = 1;
}
i++;
}
if(max == 1){
System.out.println("所有字符都只单个出现,并无连续");
return;
}
for(int p = 0; p < note.length; p++){
if(note[p] != -1){
System.out.println(sb.substring(note[p], note[p]+max));
}
}

}

对不起啊,那个你这个我没注意到,因为你这字符串特殊了,重复到最后了所以,你发现没,最后进入不到那个else,所以我这里先对字符串做了一个处理就是在其末尾加了个%,希望你的字符串重复的可不是%噻
MIZYIEKR
2012-06-17 · 超过12用户采纳过TA的回答
知道答主
回答量:141
采纳率:0%
帮助的人:61.8万
展开全部
....
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
YUXUERUI
2012-06-15 · TA获得超过1702个赞
知道小有建树答主
回答量:907
采纳率:0%
帮助的人:518万
展开全部
貌似可以用正则表达式匹配找出来,具体的写法我忘了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式