Categories:

Tags:



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