competitive_library/algorithm/
run_length.rs1pub 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}