1. 程式人生 > 其它 >LeetCode 541. Reverse String II

LeetCode 541. Reverse String II

LeetCode 541. Reverse String II (反轉字串 II)

題目

連結

https://leetcode.cn/problems/reverse-string-ii/

問題描述

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

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

示例

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

提示

1 <= s.length <= 104
s 僅由小寫英文組成
1 <= k <= 104

思路

普通的翻轉字串的題目,只需要多加一些條件即可。

複雜度分析

時間複雜度 O(n)
空間複雜度 O(n)

程式碼

Java

    public String reverseStr(String s, int k) {
        char[] c = s.toCharArray();
        for (int i = 0; i * k < s.length(); i = i + 2) {
            int left = i * k, right = Math.min(left + k - 1, s.length() - 1);
            while (left < right) {
                char temp = c[left];
                c[left++] = c[right];
                c[right--] = temp;
            }
        }
        return new String(c);
    }