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); }