From e64dee58aa437d4266ce6046479e8c13eb37652e Mon Sep 17 00:00:00 2001 From: jackfiled Date: Fri, 31 Jan 2025 12:11:00 +0800 Subject: [PATCH] 20250131 finished. --- src/problem/mod.rs | 2 + src/problem/p541_reverse_string_ii.rs | 64 +++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 src/problem/p541_reverse_string_ii.rs diff --git a/src/problem/mod.rs b/src/problem/mod.rs index 8b7569f..06b2c69 100644 --- a/src/problem/mod.rs +++ b/src/problem/mod.rs @@ -460,3 +460,5 @@ mod p40_combination_sum_ii; mod p119_pascals_triangle_ii; mod p350_intersection_of_two_arrays_ii; + +mod p541_reverse_string_ii; diff --git a/src/problem/p541_reverse_string_ii.rs b/src/problem/p541_reverse_string_ii.rs new file mode 100644 index 0000000..1e73a73 --- /dev/null +++ b/src/problem/p541_reverse_string_ii.rs @@ -0,0 +1,64 @@ +/** + * [541] Reverse String II + */ +pub struct Solution {} + +// submission codes start here + +impl Solution { + pub fn reverse_str(s: String, k: i32) -> String { + let s: Vec = s.chars().collect(); + + let mut reverse = true; + let k = k as usize; + + let mut result = Vec::with_capacity(s.len()); + let mut buffer = Vec::with_capacity(k); + let mut pos = 0; + + 'outer: loop { + for _ in 0..k { + if pos == s.len() { + while let Some(c) = buffer.pop() { + result.push(c); + } + + break 'outer; + } + + if reverse { + buffer.push(s[pos]); + } else { + result.push(s[pos]); + } + pos += 1; + } + + while let Some(c) = buffer.pop() { + result.push(c); + } + reverse = !reverse; + } + + result.into_iter().collect() + } +} + +// submission codes end + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_541() { + assert_eq!( + "bacdfeg".to_owned(), + Solution::reverse_str("abcdefg".to_owned(), 2) + ); + assert_eq!( + "bacd".to_owned(), + Solution::reverse_str("abcd".to_owned(), 2) + ); + } +}