830. Positions of Large Groups

孤街醉人 提交于 2020-03-07 08:17:23

解题思路:因为给定的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;
    }
};
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!