一、前言
中间有些事情耽误了,断更了一个礼拜,从今天起又开始恢复更新了。今天我就进入了字符串部分,我感觉大家对于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,请各位自行去试试吧。
四、后记
我跟着刷题,才发现最难的并不是刷题本身,而是坚持,中间有很多事会阻碍我们的计划,另一方面是懒惰,懒惰是舒服的没有任务,轻松度过每一天,可是我想这并不是我刷题的初衷,也不是我想要度过每一天的方式。山有千刃,我自向山!可能这方面的坚持和修炼还不够吧,我应该变得更加坚定、纯粹一点吧,这样人才会在自己的前进道路上更加脚步坚定!!!加油各位,我们都有光明的未来!