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; } };