給定一個字符串 s 和一個整數 k,你需要對從字符串開頭算起的每隔 2k 個字符的前 k 個字符進行反轉。

1.題目

給定一個字符串 s 和一個整數 k,你需要對從字符串開頭算起的每隔 2k 個字符的前 k 個字符進行反轉。

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

示例:

輸入: s = “abcdefg”, k = 2
輸出: “bacdfeg”

提示:

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

2.代碼展示

class Solution {
public:
    string reverseStr(string s, int k) {
        auto it = s.begin();
        while (it < s.end()){
            if (s.end()-it<k){
                reverse(it,s.end());
            }
            else{
                reverse(it,it+k);
            }
            it = it+2*k;
        }
        return s;
    }
};

3.解題思路

通過迭代器遍歷,當剩餘字符長度小於K時,全部轉置,其餘情況直接轉置當前位置到K位。
即便小於2k,我們迭代器增加2k,最後也符合終止條件了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章