给一个固定长度的字符串,找出里面连续重复的最长字符子串,若存在多个结果,输出其中一个即可;
示例:字符串'aabbbccccd',输出'cccc',字符串'asssdd',输出结果为'sss'
定义一个双指针,慢指针指向0,快指针指向1
当快慢指针指向同一字符时,快指针右移一位,计算 dis 和 更新字符串
当快慢指针指向不同字符时,慢指针移动至快指针位置,快指针右移一位
function findCopy( str ){
let arr = str.split('')
let fastPoint = 1, lowPoint = 0, dis = 0, flag = arr[0]
/*
* dis表示重复的最大长度; flag表示重复的 子串字符
* 当 快慢指针指向 同一 字符时 快指针 右移一位 计算 dis 和 更新字符串
* 当 快慢指针指向 不同 字符时 慢指针 移动 至 快指针 位置 快指针 右移一位
*/
while( fastPoint < arr.length ){
if( arr[lowPoint] == arr[fastPoint] ){
if ( dis < fastPoint - lowPoint ){
dis = fastPoint - lowPoint
flag = arr[lowPoint]
}
}else{
lowPoint = fastPoint
}
fastPoint ++
}
return new Array(dis).fill(flag).join('')
}
以上仅为个人想法,欢迎指正~