解题思路:因为给定的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;
}
};