算法練習:求字符串的最長重複子串(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);
    }
相關文章
相關標籤/搜索