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

541. 反轉字符串 II

給定一個字符串和一個整數 k,你需要對從字符串開頭算起的每個 2k 個字符的前k個字符進行反轉。如果剩餘少於 k 個字符,則將剩餘的所有全部反轉。如果有小於 2k 但大於或等於 k 個字符,則反轉前 k 個字符,並將剩餘的字符保持原樣。

示例:

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

要求:

  1. 該字符串只包含小寫的英文字母。
  2. 給定字符串的長度和 k 在[1, 10000]範圍內。

解法一

//時間複雜度O(n), 空間複雜度O(1)
class Solution {
public:
    string reverseStr(string s, int k) {
        int idx = 0;
        while(idx < s.size()) {
            int i = idx;
            int j = idx + k - 1 < s.size() ? idx + k - 1 : s.size() - 1;
            for(; i < j; i++, j--) {
                char temp = s[i];
                s[i] = s[j];
                s[j] = temp;
            }
            idx += 2 * k;
        }
        return s;
    }
};

解法一
雙指針法:

  1. 指針 i,j 分別指向子串的頭和尾,負責交換要反轉的子串。i 每次初始化爲idx,j 如果超過了原字符串的右邊界,則初始化爲指向最後一個元素,否則它指向idx + k - 1;
  2. idx負責找到第2k個位置,每次向後移動2k,直到idx超出右邊界。
2019/05/31 19:32
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章