Skip to main content
Back to problems
#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)
LeetCode
solution.rs
/*
 * 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
  }
}