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