较大分组的位置
问题:
在一个由小写字母构成的字符串 s 中,包含由一些连续的相同字符所构成的分组。
例如,在字符串
s = "abbxxxxzyy"
中,就含有"a", "bb", "xxxx", "z"
和"yy"
这样的一些分组。
分组可以用区间
[start, end]
表示,其中 start 和 end 分别表示该分组的起始和终止位置的下标。上例中的 “xxxx” 分组用区间表示为 [3,6] 。
我们称所有包含大于或等于三个连续字符的分组为 较大分组 。
找到每一个 较大分组 的区间,按起始位置下标递增顺序排序后,返回结果。
思路:
遍历字符串,如果相邻字符一样,计数器加一,如果不一样,则判断计数值是否大于 1 (count = 2 时已经连续三个字符相同),大于则添加到二维数组中,否则计数器被置为 0 。继续遍历字符串,直到最后一位。
class Solution {
public:
vector<vector<int>> largeGroupPositions(string s) {
vector<vector<int>> res;
auto n = s.length();
auto count = 0;
for(auto i = 0; i < n; ++i){
if(i == n - 1 || s[i] != s[i + 1]){
if(count > 1){
res.push_back({
i - count, i});
}
count = 0;
}
else count++;
}
return res;
}
};