aboutsummaryrefslogtreecommitdiff
path: root/other/string_compression.rs
diff options
context:
space:
mode:
Diffstat (limited to 'other/string_compression.rs')
-rw-r--r--other/string_compression.rs38
1 files changed, 38 insertions, 0 deletions
diff --git a/other/string_compression.rs b/other/string_compression.rs
new file mode 100644
index 0000000..1d5db7d
--- /dev/null
+++ b/other/string_compression.rs
@@ -0,0 +1,38 @@
+struct Solution;
+
+impl Solution {
+ pub fn compress(chars: &mut Vec<char>) -> i32 {
+ let (mut i, mut j, mut count, mut last_char) = (0, 1, 1, chars[0]);
+ while j < chars.len() {
+ if chars[j] == last_char {
+ count += 1;
+ } else {
+ chars[i] = last_char;
+ i += 1;
+ if count > 1 {
+ count.to_string().chars().for_each(|x| {
+ chars[i] = x;
+ i += 1;
+ });
+ }
+ last_char = chars[j];
+ count = 1;
+ }
+ j += 1;
+ }
+ chars[i] = last_char;
+ i += 1;
+ if count > 1 {
+ count.to_string().chars().for_each(|x| {
+ chars[i] = x;
+ i += 1;
+ });
+ }
+ i as i32
+ }
+}
+
+fn main() {
+ let mut c = vec!['a','a','b','b','c','c','c'];
+ print!("{}", Solution::compress(&mut c));
+}