題目
給定一個字符串 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);
}
}