541. Reverse String II

Description

Given a string and an integer k, you need to reverse the first k characters for every 2k characters counting from the start of the string. If there are less than k characters left, reverse all of them. If there are less than 2k but greater than or equal to k characters, then reverse the first k characters and left the other as original.

Example:
Input: s = "abcdefg", k = 2
Output: "bacdfeg"

Restrictions:
The string consists of lower English letters only.
Length of the given string and k will in the range [1, 10000]

Solution

我还能说什么呢,超级简单题。

class Solution {
    public String reverseStr(String s, int k) {
        if (k < 2 || s == null || s.length() < 2) return s;
        int n = s.length();
        char[] chars = s.toCharArray();
        int i = 0;
        while (i < n) {
            reverse(chars, i, Math.min(i + k - 1, n - 1));
            i += 2 * k;
        }
        return new String(chars);
    }
    
    public void reverse(char[] chars, int start, int end) {
        while (start < end) {
            swap(chars, start++, end--);
        }
    }
    
    public void swap(char[] chars, int i, int j) {
        char tmp = chars[i];
        chars[i] = chars[j];
        chars[j] = tmp;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容