Leetcode - 541. Reverse String II

1. 算法描述

給定一個字符串和一個整數k, 從字符串首字符開始,每2k個字符,反轉前面k個字符。
(1)如果字符串長度小於k, 則反轉所有字符串;
(2)如果字符串長度小於2
k並且大於或等於k,則反轉前面k個字符,剩餘字符保持原來順序。
例如:
Input: s = “abcdefg”, k = 2
Output: “bacdfeg”

2. 思想分析

(1)如果s.length() >= 2k, reverse前面k個字符串。
同時,將前2k個字符,累加到結果字符串;後2k個字符更新爲s, 用來進行下一次處理。
(2)如果s.length() >= k, reverse前面k個字符串。
將這k個字符串累加到結果中。
同時s清空,退出while循環。
(3)當s.length() < k,直接反轉所有字符。

3. 參考代碼

(個人leetcode算法均本着容易理解爲第一原則,儘量提升效率。)

class Solution {
public:
    string reverseStr(string s, int k) {
        string result;
        
        while (s.length() >= k)
        {
            
            if (s.length() >= 2 * k)
            {
                reverse(s.begin(), s.begin() + k);
                result += s.substr(0, 2 * k);
                s = s.substr(2 * k);
            }
            else if (s.length() >= k)
            {
                reverse(s.begin(), s.begin() + k);
                result += s;
                s.clear();
            }
            
        }
        

        reverse(s.begin(), s.end());
        result += s;
        
        
        return result;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章