#830
Easy Algorithms Positions of large groups
String
53.8% acceptance
Feb 22, 2026
926
127
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.
Solution
Rust
Time O(n²)
Space O(n)
/*
* 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 <= 1000
* s contains lowercase English letters only.
*/
impl Solution {
pub fn large_group_positions(s: String) -> Vec<Vec<i32>> {
let bytes = s.as_bytes();
let n = bytes.len();
let mut res = vec![];
let mut i = 0;
while i < n {
let mut j = i;
while j < n && bytes[j] == bytes[i] { j += 1; }
if j - i >= 3 {
res.push(vec![i as i32, (j - 1) as i32]);
}
i = j;
}
res
}
}