算法练习:求字符串的最长重复子串(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); }

  

posted @ 2018-07-09 00:10  lonecloud  阅读(10061)  评论(2编辑  收藏  举报
我的博客即将同步至 OSCHINA 社区,这是我的 OSCHINA ID:lonecloud,邀请大家一同入驻:https://www.oschina.net/sharing-plan/apply