JS双指针——查找连续重复的最长字符子串

132 阅读1分钟

给一个固定长度的字符串,找出里面连续重复的最长字符子串,若存在多个结果,输出其中一个即可;

示例:字符串'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('')
        }

以上仅为个人想法,欢迎指正~