541. Reverse String II

来源:互联网 发布:幼儿英语网络课程 编辑:程序博客网 时间:2024/04/30 14:41

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 = 2Output: "bacdfeg"

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

自己写一个reverse函数用来反转start-start+k的子字符串。这里需要判断start+k不要越界。代码如下:

public class Solution {    public String reverseStr(String s, int k) {        char[] chs = s.toCharArray();        int count = 1;        for (int i = 0; i < chs.length; i = i + k) {            if (count % 2 == 1) {                reverse(chs, i, i + k - 1, k);            }            count ++;        }        return new String(chs);    }        private void reverse(char[] chs, int start, int end, int k) {        if (start + k > chs.length) {            end = chs.length - 1;        }        while (start < end) {            char temp = chs[start];            chs[start] = chs[end];            chs[end] = temp;            start ++;            end --;        }    }}
比较简洁的版本,代码如下:

public class Solution {    public String reverseStr(String s, int k) {        char[] arr = s.toCharArray();        int n = arr.length;        int i = 0;        while(i < n) {            int j = Math.min(i + k - 1, n - 1);            swap(arr, i, j);            i += 2 * k;        }        return String.valueOf(arr);    }    private void swap(char[] arr, int l, int r) {        while (l < r) {            char temp = arr[l];            arr[l++] = arr[r];            arr[r--] = temp;        }    }}

0 0
原创粉丝点击