Leetcode541. 反转字符串 II -JAVA

题目传送门

Leetcode541. 反转字符串 II -JAVA

题目

给定一个字符串 s 和一个整数 k,你需要对从字符串开头算起的每隔 2k 个字符的前 k 个字符进行反转。

如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

示例:

输入: s = “abcdefg”, k = 2
输出: “bacdfeg”

思路

首先考虑到String 是不可变得,我们转化为数组,原地交换就可以了。
如何交换?
我们每2k 个字符进行一次交换每次交换前k个,交换的区间为 start ~ start+k

解法

双指针

class Solution {
    public String reverseStr(String s, int k) {
        char[] chars = s.toCharArray();
        int k2 = 2*k;
        for(int i =0;i<chars.length;i+=k2) {
            int start = i;
            int end = Math.min(chars.length-1,start+k-1); //注意start+k 要减1 ,因为是数组下标从0开始。 
            while(start<end) {
                char temp = chars[start];
                chars[start] = chars[end];
                chars[end] = temp;
                start++;
                end--;
            }
        }
        return String.valueOf(chars);
    }
   
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章