java 獲得字符串中最大重復子串長度


參考:http://blog.csdn.net/csdn_yaobo/article/details/50338025

 

要找一串字符串中,重復的字串長度,。例如ABCX1&ABC,中ABC重復了這道題呢021Abc9Abc1

  看上圖,這個圖是按這個規則畫的,如果字符串相等,dp[i][j]=dp[i-1][j-1]+1,否則為0,那么我們發現除了對角線部分的數字以外,其余部分的數字中,1,2,3出現了兩次,如圖紅色字體,那么我們就可以得到長度為3的字串重復出現了兩次,這樣這個問題就基本解決。

  下來我們只需要遍歷這個二維矩陣,不過得加個條件,對角線上的數字不做統計,只需要判斷大於二,相同的數字出現的次數,如果次數大於2則不否合要求。用一個一維數組統計出對角線以外的數字出現的個數,然后從3開始遍歷,如果存在a[i]>1,說明長度大於2且出現了至少兩次,直接輸出不合格。

int len = str.length();

        int array[][] = new int[len + 1][len + 1];
        for (int m = 0; m < len; m++) {

            for (int n = 0; n < len; n++) {
                if (str.charAt(m) == str.charAt(n))
                    array[m + 1][n + 1] = array[m][n] + 1;

            }

        }

        int max = 0;
        for (int m = 0; m < len + 1; m++) {

            for (int n = 0; n < len + 1; n++) {
                if ((m != n) && (array[m][n] > max))
                    max = array[m][n];

            }

        }

max即為最大重復子串長度。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM