rustgym/leetcode/
_541_reverse_string_2.rs

1struct 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}