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.
Example 1:
Input: s = "abbxxxxzzy"
Output: [[3,6]]
Explanation: "xxxx" is the only large group with start index 3 and end index 6.
Example 2:
Input: s = "abc" Output: [] Explanation: We have groups "a", "b", and "c", none of which are large groups.
Example 3:
Input: s = "abcdddeeeeaabbbcd" Output: [[3,5],[6,9],[12,14]] Explanation: The large groups are "ddd", "eeee", and "bbb".
Constraints:
1 <= s.length <= 1000s contains lowercase English letters only.Problem Overview: Given a string s, you need to return the start and end indices of every group of identical characters that appears three or more times consecutively. These are called large groups. The result should list each group's starting and ending index in ascending order.
Approach 1: Iterative Group Detection (O(n) time, O(1) space)
This approach scans the string once while tracking the start index of the current character group. Iterate through the string and compare each character with the previous one. When the character changes, the current group ends. Check the group length using i - start; if it is at least 3, record [start, i-1]. Then update start to the current index and continue scanning. After the loop, run the same check for the final group since it might reach the end of the string. The algorithm performs a single pass over the string, giving O(n) time complexity and constant O(1) extra space (excluding the output). This method works well for problems involving consecutive patterns in a string.
Approach 2: Two Pointer Technique (O(n) time, O(1) space)
The two pointers pattern provides a clean way to track character groups. Maintain two indices: left marks the start of a group and right expands forward while characters remain the same. While s[right] == s[left], keep moving right. Once a different character appears or the string ends, compute the group size using right - left. If the size is at least 3, append [left, right-1] to the result. Then move left to right to begin scanning the next group. Each character is visited at most twice (once by each pointer), so the time complexity remains O(n) with O(1) additional space. This version clearly separates group detection and expansion logic, which many engineers find easier to reason about.
Recommended for interviews: Interviewers typically expect the linear scan or two-pointer solution because both run in O(n) time and require only constant extra space. Starting with the iterative group detection approach shows you understand how to track contiguous segments in a string. Implementing the two-pointer variation demonstrates familiarity with a widely used pattern for segment scanning problems.
This approach involves iterating through the string to detect groups of consecutive characters. We maintain a start index for the current group and check whenever a character changes. If the length of a group is 3 or more, we record the start and end indices.
The function iterates through the string, marking the start of a group. Whenever a character change is detected, it checks the size of the group. Groups of size 3 or more are considered 'large', and their start and end indices are added to the results.
Time Complexity: O(n), where n is the length of the string.
Space Complexity: O(n) for storing the result.
The two-pointer technique is another efficient way to solve this problem. The idea is to have a slow pointer marking the start of the group and a fast pointer iterating through the string. When the character at the fast pointer changes or reaches the end, check the length of the group.
This C solution uses two pointers, `slow` marking the start of a group and `fast` iterating through the string. When a change is detected, the interval is evaluated for its 'large' status.
Time Complexity: O(n), where n is the length of the string.
Space Complexity: O(n) for storing the result.
We use two pointers i and j to find the start and end positions of each group, then check if the group length is greater than or equal to 3. If so, we add it to the result array.
The time complexity is O(n), where n is the length of the string s.
Python
Java
C++
Go
TypeScript
| Approach | Complexity |
|---|---|
| Iterative Group Detection | Time Complexity: O(n), where n is the length of the string. |
| Two Pointer Technique | Time Complexity: O(n), where n is the length of the string. |
| Two Pointers | — |
| Approach | Time | Space | When to Use |
|---|---|---|---|
| Iterative Group Detection | O(n) | O(1) | Simple implementation when scanning consecutive characters in a string |
| Two Pointer Technique | O(n) | O(1) | Preferred when solving segment or range problems using expanding windows |
LeetCode#830 Positions of Large Groups - Python • CodeJulian • 1,294 views views
Watch 9 more video solutions →Practice Positions of Large Groups with our built-in code editor and test cases.
Practice on FleetCode