天天看點

六六力扣刷題字元串之反轉字元串2

前言

之前小六六一直覺得自己的算法比較菜,算是一個短闆吧,以前刷題也還真是三天打魚,兩天曬網,刷幾天,然後就慢慢的不堅持了,是以這次,借助平台的活動,打算慢慢的開始開刷,并且自己還會給刷的題總結下,談談自己的一些思考,和自己的思路等等,希望對小夥伴能有所幫助吧,也可以借此機會把自己短闆補一補,希望自己能堅持下去呀

連結清單的合集

  • ​​六六力扣刷題哈希表之哈希理論​​
  • ​​六六力扣刷題哈希表之有效的字母異位詞​​
  • ​​六六力扣刷題哈希表之兩個數組的交集​​
  • ​​六六力扣刷題哈希表之快樂數​​
  • ​​六六力扣刷題哈希表之贖金信​​
  • ​​六六力扣刷題哈希表之三數之和​​

字元串

  • ​​六六力扣刷題字元串之反轉字元串​​

題目

給定一個字元串 s 和一個整數 k,從字元串開頭算起,每計數至 2k 個字元,就反轉這 2k 字元中的前 k 個字元。

如果剩餘字元少于 k 個,則将剩餘字元全部反轉。

如果剩餘字元小于 2k 但大于或等于 k 個,則反轉前 k 個字元,其餘字元保持原樣。

示例 1:

輸入:s = "abcdefg", k = 2

輸出:"bacdfeg"

示例 2:

輸入:s = "abcd", k = 2

輸出:"bacd"

題解

這道題目其實也是模拟,實作題目中規定的反轉規則就可以了。

一些同學可能為了處理邏輯:每隔2k個字元的前k的字元,寫了一堆邏輯代碼或者再搞一個計數器,來統計2k,再統計前k個字元。

其實在周遊字元串的過程中,隻要讓 i += (2 * k),i 每次移動 2 * k 就可以了,然後判斷是否需要有反轉的區間。

代碼

class Solution {
    public String reverseStr(String s, int k) {
        int n = s.length();
        char[] arr = s.toCharArray();
        for (int i = 0; i < n; i += 2 * k) {
            reverse(arr, i, Math.min(i + k, n) - 1);
        }
        return new String(arr);
    }

    public void reverse(char[] arr, int left, int right) {
        while (left < right) {
            char temp = arr[left];
            arr[left] = arr[right];
            arr[right] = temp;
            left++;
            right--;      

結束

繼續閱讀