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

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

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

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

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

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

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

算法实现:(Java实现)string

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);
    }
相关文章
相关标签/搜索