Solve 443. String Compression

This commit is contained in:
Samuel Ortion 2025-03-05 20:32:03 +01:00
parent e76ab13277
commit 7e584cf405
Signed by: sortion
GPG Key ID: 9B02406F8C4FB765
3 changed files with 102 additions and 0 deletions

View File

@ -0,0 +1,6 @@
[package]
name = "string-compression"
version = "0.1.0"
edition = "2021"
[dependencies]

View File

@ -0,0 +1,6 @@
mod string_compression;
fn main() {
println!("Hello, world!");
}

View File

@ -0,0 +1,90 @@
//! # 443. String Compression
use core::num;
pub struct Solution;
impl Solution {
pub fn compress(chars: &mut Vec<char>) -> i32 {
let mut i: usize = 0;
while i < chars.len() {
let letter = chars[i];
let mut count: usize = 0;
while i + count < chars.len() && chars[i + count] == letter {
count += 1;
}
if count > 1 {
let number: String = count.to_string();
for (index, item) in number.chars().enumerate() {
chars[i + index + 1] = item;
}
for _ in 0..(count - number.len() - 1) {
chars.remove(i + number.len() + 1);
}
i += number.len();
}
i += 1;
}
chars.len() as i32
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_aa() {
let mut chars = vec!['a', 'a'];
let expected = vec!['a', '2'];
let size = Solution::compress(&mut chars);
assert_eq!(chars, expected);
assert_eq!(size, 2);
}
#[test]
fn test_aaa() {
let mut chars = vec!['a', 'a', 'a'];
let expected = vec!['a', '3'];
let size = Solution::compress(&mut chars);
assert_eq!(chars, expected);
assert_eq!(size, 2);
}
#[test]
fn test_abaa() {
let mut chars = vec!['a', 'b', 'a', 'a'];
let expected = vec!['a', 'b', 'a', '2'];
let size = Solution::compress(&mut chars);
assert_eq!(chars, expected);
assert_eq!(size, 4);
}
#[test]
fn test_1() {
let mut chars = vec!['a', 'a', 'b', 'b', 'c', 'c', 'c'];
let expected = vec!['a', '2', 'b', '2', 'c', '3'];
let size = Solution::compress(&mut chars);
assert_eq!(chars, expected);
assert_eq!(size, 6);
}
#[test]
fn test_2() {
let mut chars = vec!['a'];
let expected = vec!['a'];
let size = Solution::compress(&mut chars);
assert_eq!(chars, expected);
assert_eq!(size, 1);
}
#[test]
fn test_3() {
let mut chars = vec!['a', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b'];
let expected = vec!['a', 'b', '1', '2'];
let size = Solution::compress(&mut chars);
assert_eq!(chars, expected);
assert_eq!(size, 4);
}
}