Positions of Large Groups
Problem
In a string s
of lowercase letters, these letters form consecutive groups of the same character.
For example, a string like s = "abbxxxxzyy"
has the groups "a"
, "bb"
, "xxxx"
, "z"
, and "yy"
.
A group is identified by an interval [start, end]
, where start
and end
denote the start and end indices (inclusive) of the group. In the above example, "xxxx"
has the interval [3,6]
.
A group is considered large if it has 3 or more characters.
Return the intervals of every large group sorted in increasing order by start index.
Constraints
1 <= s.length <= 1000
s
contains lowercase English letters only.
Solution
The problem Positions of Large Groups
can be solved by using two pointers to keep track of start and end indexes for each groups.
Implementation
static const int fast_io = []()
{
std::ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
return 0;
}();
class Solution
{
public:
vector<vector<int>> largeGroupPositions(string s)
{
s += ' ';
vector<vector<int>> ret;
for (int left = 0, right = 0; right < s.length() - 1; right++)
{
if (s[right] != s[right + 1])
{
if (right - left + 1 >= 3)
ret.push_back(vector<int>{left, right});
left = right + 1;
}
}
return ret;
}
};