LeetCode——541. 反轉字串 II(Java)
阿新 • • 發佈:2021-08-20
題目描述
題幹:
給定一個字串 s 和一個整數 k,從字串開頭算起,每 2k 個字元反轉前 k 個字元。
如果剩餘字元少於 k 個,則將剩餘字元全部反轉。
如果剩餘字元小於 2k 但大於或等於 k 個,則反轉前 k 個字元,其餘字元保持原樣。
示例 1:
輸入:s = "abcdefg", k = 2
輸出:"bacdfeg"
示例 2:
輸入:s = "abcd", k = 2
輸出:"bacd"
題解思路
返回每k個字元反轉之後的字串,這裡要注意是每k個反轉一次,並且如果不夠長則全部反轉 首先反轉必寫的反轉函式老生常談了,雙指標while一遍反轉,這裡難點是每次的左右指標 如果我們每k個反轉一次,我們就必須每次增加2k個,只取k個反轉,如果右指標大於length則給他字串長度
正確程式碼
public String reverseStr(String s, int k) { int length = s.length(); char[] arr = s.toCharArray(); for (int i = 0; i < length; i += 2 * k) { reverse(arr, i, Math.min(length, i + k) - 1); } return new String(arr); } private void reverse(char[] arr, int left, int right) { while (left < right) { char temp = arr[left]; arr[left] = arr[right]; arr[right] = temp; left++; right--; } }
總結
作為反轉plus版本我不知道有沒有Ⅲ,不過只需要找到每次反轉的範圍和邊界處理即可
如果文章存在問題或者有更好的題解,歡迎在評論區斧正和評論,各自努力,你我最高處見