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);
    }
   
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章