小白跟随卡哥刷题第十四天(字符串部分)

一、前言

中间有些事情耽误了,断更了一个礼拜,从今天起又开始恢复更新了。今天我就进入了字符串部分,我感觉大家对于string还是比较熟悉的,string与char数组的转换都是比较熟悉的。string本质与vector、set和map等一样是一种容器 。接下来就直接上题吧,今天的题也是比较简单的。

二、题目(力扣第541题字符串翻转||. - 力扣(LeetCode)

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

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

示例 1:

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

示例 2:

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

三、题解

这个题比较简单的思路就是使用reverse函数对于,2k中的前k个字符串直接使用即可,当然也要判断当前字符串的位置与end比较。(思路与卡哥的差不多,我也把卡哥的讲解放到这里代码随想录)接下来直接上代码。

(1)代码
string reverseStr(string s, int k) {
	for(int i=0;i<s.size();i=i+2*k){//每次移动2k个元素
		if((i+k)<s.size()){//判断若当前位置的后k个元素都存在,则翻转这k个元素
			reverse(s.begin()+i,s.begin()+i+k);
		}
		else{//否则说明最后不足k个元素了,直接全部翻转即可
			reverse(s.begin()+i,s.end());
		}
	}
	return s;
}
(2)思路

思路是很简单的,每次移动2k个距离即可,然后判断当前位置的前k个元素是否没有越界(没有超过字符串长度),若没有超过则翻转前k个元素位置,否则说明最后的元素不足k个就到最后了,只用翻转当前起点位置到末尾即可。思路和具体的解释都在代码里体现了,各位可以自己去看看,当然还有一种思路是:将字符串以2k为单位分段,然后对每一段的前k个元素进行reverse,请各位自行去试试吧。

四、后记

我跟着刷题,才发现最难的并不是刷题本身,而是坚持,中间有很多事会阻碍我们的计划,另一方面是懒惰,懒惰是舒服的没有任务,轻松度过每一天,可是我想这并不是我刷题的初衷,也不是我想要度过每一天的方式。山有千刃,我自向山!可能这方面的坚持和修炼还不够吧,我应该变得更加坚定、纯粹一点吧,这样人才会在自己的前进道路上更加脚步坚定!!!加油各位,我们都有光明的未来!

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值