java 求最长重复子串_算法练习:求字符串的最长重复子串(Java实现)

1. 求字符串的最长重复子串

例如:aaaaaaaaabbbbcccaaassscvvv这里面的最长重复子串为aaaaaaaaa

算法思路:算法时间复杂度(O(n))

1. 将这一个字符串先转成char数组;

2. 将这一char数组进行遍历

3. 比较char数组中第i-1个与第i个的字符是否相等,如果不相等则进行截取字符串长度,然后将其进行比较,如果其长度比现有长度大,则进行替换,否则什么也不做

算法实现:(Java实现)

private static String reSubStr(String str){

/**

* 设置变量

* start:开始

* end:结束

* maxStart:最长子串开始位置

* maxEnd:最长子串结束位置

*/

int start=0,end=1,maxStart=0,maxEnd=1;

char[] chars = str.toCharArray();

for (int i = 1; i < chars.length; i++) {

//判断如果不相等,则计算器长度

if(chars[i-1]!=chars[i]) {

//设置其重复子串结束位置

end=i;

//子串长度

int len = end - start;

//子串长度大于现有的最大子串长度

if (len > (maxEnd - maxStart)) {

//则进行赋值

maxStart = start;

maxEnd = end;

}

//开始截取位置为end结束位置

start = end;

}

}

//截取字符串

return str.substring(maxStart,maxEnd);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值