competitive_library/algorithm/
run_length.rs

1//! ランレングス
2pub fn compress(s: &str) -> Vec<(char, usize)> {
3    let vs = s.chars().collect::<Vec<_>>();
4
5    let mut buff = vs[0];
6    let mut count = 1;
7    let mut v = vec![];
8    for c in vs.iter().skip(1) {
9        if *c != buff {
10            v.push((buff, count));
11            count = 1;
12            buff = *c;
13        } else {
14            count += 1;
15        }
16    }
17    v.push((buff, count));
18    v
19}
20
21#[cfg(test)]
22mod tests {
23    use super::*;
24    #[test]
25    fn test_run_length() {
26        let v = vec![('a', 5usize), ('b', 3), ('c', 1)];
27
28        assert_eq!(compress("aaaaabbbc"), v);
29    }
30}