541, Reverse String II
11/18/23Less than 1 minute
I Problem
Given a string s and an integer k, reverse the first k characters for every 2k characters counting from the start of the string.
- If there are fewer than 
kcharacters left, reverse all of them. - If there are less than 
2kbut greater than or equal tokcharacters, then reverse the firstkcharacters and leave the other as original. 
Example 1
 Input: s = "abcdefg", k = 2
 Output: "bacdfeg"
Example 2
 Input: s = "abcd", k = 2
 Output: "bacd"
Constraints
1 <= s.length <= 10⁴sconsists of only lowercase English letters1 <= k <= 10⁴
Related Topics
- Two Pointers
 - String
 
II Solution
Approach 1: Two Pointers
Rust
pub fn reverse_str(s: String, k: i32) -> String {
    let k = k as usize;
    let len = s.len();
    let p = unsafe { s.as_bytes_mut() };
    let mut begin = 0_usize;
    let mut end = begin + k;
    loop {
        if begin >= len {
            break;
        }
        if end > len {
            end = len;
        }
        let mut l = begin;
        let mut r = end - 1;
        while l < r {
            p.swap(l, r);
            l += 1;
            r -= 1;
        }
        begin += 2 * k;
        end = begin + k;
    }
    s
}Java
public String reverseStr(String s, int k) {
    char[] chars = s.toCharArray();
    int len = chars.length;
    int begin = 0;
    int end = begin + k;
    do {
        if (end > len) {
            end = len;
        }
        int l = begin;
        int r = end - 1;
        while (l < r) {
            char temp = chars[l];
            chars[l] = chars[r];
            chars[r] = temp;
            l++;
            r--;
        }
        begin += 2 * k;
        end = begin + k;
    } while (begin < len);
    return String.valueOf(chars);
}