Day19 代码随想录打卡|字符串篇---反转字符串II

这篇文章介绍了如何解决LeetCode题目,涉及给定字符串s和整数k,每2k个字符反转前k个字符。Solution类的reverseStr函数展示了如何通过迭代和条件判断实现这个功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目(leecode T541):

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

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

方法:本题和昨天的题目的区别仅在于昨天是整个字符串反转,而本题只是反转固定的其中一部分,并且是有规律的一部分,即每2k个数字的前k个,因此我们对于每2k个元素的处理逻辑是一样的。这种情况下就可以考虑在for循环中做文章,将变量每次自增2k个元素即可。然后对于每2k个元素进行判断,前k个元素如何长度大于k,就反转前k个,然后继续循环。如果小于k的话就直接反转剩余的所有元素就结束了。

题解:

class Solution {
public:
    string reverseStr(string s, int k) {
        for(int i = 0; i < s.size(); i += (2 * k)){         //重点是每次自增2k个元素
            if(i + k < s.size()){                           //判断剩余要反转的元素是否越界了
                reverse(s.begin() + i, s.begin() + i + k);  //没越界,反转
            }
            else{
                reverse(s.begin() + i,s.end());             //越界了,反转剩余元素
            }
        }
        return s;
    }
};

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值