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;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章