xiqe / code-train

前端算法

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

较大分组的位置

xiqe opened this issue · comments

较大分组的位置

在一个由小写字母构成的字符串 S 中,包含由一些连续的相同字符所构成的分组。

例如,在字符串 S = "abbxxxxzyy" 中,就含有 "a", "bb", "xxxx", "z" 和 "yy" 这样的一些分组。

我们称所有包含大于或等于三个连续字符的分组为较大分组。找到每一个较大分组的起始和终止位置。

最终结果按照字典顺序输出。

示例 1:

输入: "abbxxxxzzy"
输出: [[3,6]]
解释: "xxxx" 是一个起始于 3 且终止于 6 的较大分组。

示例 2:

输入: "abc"
输出: []
解释: "a","b" 和 "c" 均不是符合要求的较大分组。

示例 3:

输入: "abcdddeeeeaabbbcd"
输出: [[3,5],[6,9],[12,14]]
说明:  1 <= S.length <= 1000

reply

var largeGroupPositions = function(S) {
    let result = [];
    // 双指针遍历,外层仅遍历到倒数第三项即可
    for(let i=0;i<S.length-2;i++){
        // 设置临时变量来保存可能符合的分组
        let tmp = [];
        // 设置计算器来统计,要满足2即为连续三个
        let count = 0;
        // 内层遍历对比前后两个数
        for(let j=i;j<S.length;j++){
            // 如果前后两个数相等,count为0,则设置tmp[0],并且count计数
            if(S[j] == S[j+1]){
                if(count == 0){
                    tmp[0] = j
                }
                count++;
            } else {
                // 计数中断,如果count>1则满足条件,将j赋值给外层i,跳出内循环
                if(count>1){
                    tmp[1] = j;
                    result.push(tmp); 
                }
                i = j;
                break;
            }
        }
    }
    return result;
};