代码随想录第八天|344.反转字符串、541. 反转字符串II、剑指Offer 05.替换空格、剑指Offer58-II.左旋转字符串

344.反转字符串

思路:

由于是数组存储,只需要双指针分别在首尾向中间交换即可

看代码后:

可以用库函数swap(s[i],s[j])交换



541. 反转字符串II

思路:

times=size/2k得到循环的次数,remainder=size%2k得到循环后的余数与k进行比较分类讨论。i为正在循环的次数-1

循环内:left=i*2k,right=left+k-1;

remainder<k时:left=2*k*i,right=size-1;

其他:left=i*2k,right=left+k-1;

看视频后:

i进行2k范围的跳转,如果i+k<size,则反转前k个,否则全部反转。可以自己在前面写一个左闭右闭的反转函数。


剑指Offer 05.替换空格

思路:

先遍历一遍找到空格的数量,根据数量新建一个char数组,分情况讨论。判断A[i]元素是否为空格,最后将char转成string newstr(B),返回newstr.

看代码后:

先遍历一遍找到空格数量,C++的string有resize函数,然后用双指针从后往前刷新元素,i和j分别从newsize-1和oldsize-1出发,循环条件为j<i;


 151.翻转字符串里的单词

思路:

新建一个char数组,试图用双指针从后往前复制元素。

看视频后:

这个问题可以分解成三步:

1.删除冗余空格

2.反转整个字符串

3.反转单词

删除冗余空格分成首部中部尾部的空格,分情况讨论。反转记得注意下标计算。



剑指Offer58-II.左旋转字符串

思路:

记录oldsize,resize(oldsize+n),然后将前面的元素用循环复制到后面,再双指针将元素挪前N位,最后resize(oldsize).

看代码后:

如果不申请额外空间,可以分成三部分:1.反转区间为前n的子串2.反转区间为n到末尾的子串3.反转整个字符串

三次reverse即可

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容