rustgym/leetcode/
_541_reverse_string_2.rs1struct Solution;
2
3impl Solution {
4 fn rev_half(s: &mut [char], k: usize) -> &[char] {
5 if s.len() <= k {
6 s.reverse();
7 } else {
8 let half = &mut s[0..k];
9 half.reverse();
10 }
11 s
12 }
13 fn reverse_str(s: String, k: i32) -> String {
14 let k: usize = k as usize;
15 let mut s: Vec<char> = s.chars().collect();
16 let n = s.len();
17 let mut i = 0;
18 while i * 2 * k < n {
19 let r = (i + 1) * 2 * k;
20 if r < n {
21 let ss = &mut s[i * 2 * k..r];
22 Self::rev_half(ss, k);
23 } else {
24 let ss = &mut s[i * 2 * k..n];
25 Self::rev_half(ss, k);
26 }
27 i += 1;
28 }
29 s.iter().collect()
30 }
31}
32
33#[test]
34fn test() {
35 let s = "abcdefg".to_string();
36 let k = 2;
37 let t = "bacdfeg".to_string();
38 assert_eq!(Solution::reverse_str(s, k), t);
39}