esc to dismiss
x

信息

题解

看上去是group_by, 不过group_by不带索引信息, 因此还是需要自行遍历, 根据输入的字符进行状态变化.

预读: 检测后一个是否和当前相同, 如果相同延展一个, 如果不同, 检查长度是否达到要求, 特殊处理一下结尾

pub fn large_group_positions(s: String) -> Vec<Vec<i32>> {
    let s = s.as_bytes();
    let mut ret: Vec<Vec<i32>> = vec![];
    let mut cnt = 1;
    for i in 0..s.len() {
        if i == s.len() - 1 || s[i] != s[i + 1] {
            if cnt >= 3 {
                // 必须是 `i + 1 - cnt`, 不能是 `i - cnt + 1`, 会溢出
                ret.push(vec![(i + 1 - cnt) as i32, i as i32]);
            }
            cnt = 1;
        } else {
            cnt += 1;
        }
    }
    ret
}
x