Solve 443. String Compression
This commit is contained in:
parent
e76ab13277
commit
7e584cf405
|
@ -0,0 +1,6 @@
|
|||
[package]
|
||||
name = "string-compression"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
|
@ -0,0 +1,6 @@
|
|||
|
||||
mod string_compression;
|
||||
|
||||
fn main() {
|
||||
println!("Hello, world!");
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue