830. Positions of Large Groups

解题思路:因为给定的string已经按序排列,所以这是一个典型的双指针滑动窗口的问题。

  • 设置两个指针。
    • 一个指向开始位置(start),另外一个指针不断的向后滑动
  • 如果滑动指针指向的值与start指针指向的值相同,则继续向后滑动
  • 如果滑动指针指向的值与start指针指向的值不同,则判断group长度
    • 如果满足“large”的定义,则加入到返回值中
    • 否则更新start指针值,继续以上步骤

时间复杂度O(n), 空间复杂度O(1).

class Solution {
public:
    vector<vector<int>> largeGroupPositions(string S) {
        vector<vector<int>> res;
        for(int i = 0; i < S.size(); ++i){
            int start = i;
            while(S[i] == S[i + 1]){
                ++i;
            }
            if((i - start) >= 2){
                res.push_back({start, i});
            }
        }
        return res;
    }
};
posted @ 2019-08-16 12:50  蓝色地中海  阅读(194)  评论(0编辑  收藏  举报