• 力扣第541题 反转字符串 II c++注释 双指针基础版


    题目

    541. 反转字符串 II

    简单

    给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。

    • 如果剩余字符少于 k 个,则将剩余字符全部反转。
    • 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

    示例 1:

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

    示例 2:

    输入:s = "abcd", k = 2
    输出:"bacd"
    

    提示:

    • 1 <= s.length <= 104
    • s 仅由小写英文组成
    • 1 <= k <= 104

    思路和解题方法

    1. 声明一个整数变量i用于循环迭代,初始值为0。
    2. 在循环中,每次以2k为步长进行迭代,即每次处理2k个字符。
    3. 对于每个组,判断如果当前位置i加上k仍然小于等于字符串s的大小,则表示该组内有足够的k个字符可以进行反转操作。
      • 调用reverse函数对从ii+k-1的字符进行反转操作。
      • 继续下一次迭代。
    4. 如果剩余字符不足k个,则将剩余字符全部反转。
      • 调用reverse函数对从i到末尾位置s.size()-1的字符进行反转操作。
    5. 循环结束后,返回最终得到的字符串s

    在函数中还定义了一个辅助函数reverse,用于将给定字符串s中指定范围从ij的字符进行反转操作。

    复杂度

            时间复杂度:

                    O(n)

            时间复杂度是O(n),其中n是字符串的长度。循环迭代的次数是字符串长度的一半,因为每次迭代处理2k个字符。

            空间复杂度

                    O(1)

            空间复杂度是O(1),没有使用额外的空间,只是对原字符串进行了原地修改。没有使用额外的数组或数据结构来存储中间结果。因此,空间复杂度是常量级别的。

    c++ 代码

     ​
    
    1. class Solution {
    2. public:
    3. string reverseStr(string s, int k) {
    4. int n = s.size();
    5. // 遍历字符串,每次步长为2k
    6. for(int i = 0; i < n; i += 2*k) {
    7. // 反转前k个字符或剩余字符中的全部字符
    8. reverse(s, i, min(i + k - 1, n - 1));
    9. // if(i+k<=s.size())
    10. //{
    11. // reverse(s,i,i+k-1);
    12. // continue;
    13. //}
    14. //reverse(s,i,s.size()-1);
    15. }
    16. return s;
    17. }
    18. // 辅助函数:反转字符串s中从i到j的字符
    19. void reverse(string& s, int i, int j) {
    20. while(i < j) {
    21. swap(s[i], s[j]);
    22. i++;
    23. j--;
    24. }
    25. }
    26. };

    觉得有用的话可以点点赞,支持一下。

    如果愿意的话关注一下。会对你有更多的帮助。

    每天都会不定时更新哦  >人<  。

  • 相关阅读:
    CSS三大定位方式(浮动、定位、弹性盒)详细解析
    错误记录:从把项目从Tomcat8.5.37转到Tomcat10.1.7
    基于KT6368A的车载OBD蓝牙芯片模块解决方案低成本国产替代
    深入理解合成复用原则(Composition /Aggregate Reuse Principle)
    接手了个项目,被if..else搞懵逼了
    java计算机毕业设计物流企业健康管理系统源代码+数据库+系统+lw文档
    [OC学习笔记]KVO原理
    双软企业认证与税收优惠政策讲解(比较齐全)
    每日复盘-202406017
    STM32连接WIFI-ESP8266实战—STA模式运用
  • 原文地址:https://blog.csdn.net/jgk666666/article/details/133364285