字符串區間部分翻轉

題目描述

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

示例:

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

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

來源:力扣(LeetCode)
鏈接:字符串區間部分翻轉

代碼示例:

class Solution {
public:
	//翻轉字符串的函數
    void _reverseStr(string& s, int left, int right)
    {
        while (left < right)
        {
            swap(s[left], s[right]);
            ++left;
            --right;
        }
    }

    string reverseStr(string s, int k) {
        int len = s.size();
        if (k > len)//k初始值大於 s.size()的話直接全部翻轉
        {
            _reverseStr(s, 0, len - 1);
            return s;
        }
        int left = 0, right = 0;//記錄每一次需要翻轉的字符串邊界
        int i;
        for (i = 0; i + k * 2 < len; i = i + k * 2)//這裏i代表左邊界的值, 注意跳出條件, 左邊界加2k大於等於 len 的時候就該跳出了
        {
            left = i;
            right = i + k - 1;
            _reverseStr(s, left, right);
        }
        if (len - i + 1 < k)//跳出之後對剩餘字符的數量進行判斷並進行對應翻轉, 只需要注意邊界條件即可
        {
            _reverseStr(s, i, len - 1);
        }
        else
        {
            _reverseStr(s, i, i + k - 1);
        }
        return s;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章