代码随想录算法训练营第八天| 344、541、剑指offer05和58-II、151

344.反转字符串

文档和视频讲解:代码随想录(programmercarl.com)

状态:ac

用时:0.5h

思路:从字符串左右两边向中间遍历,依次交换两边字符。

代码:

图1



541. 反转字符串II

文档和视频讲解:代码随想录(programmercarl.com)

状态:未ac

用时:1h

思路:字符串长度可以表示为n\times (2\times k) + b,遍历字符串的时候,步进为2k,当当前位置i+k\leq n,表示处于n个2k中的某一个或者b大于k小于2k,则翻转前k个;反之,则表示处于b,且b小于k,则翻转剩余所有的字符。

代码:

图2



 剑指Offer 05.替换空格 

文档和视频讲解:代码随想录(programmercarl.com)

状态:ac

用时:1h

思路:先计算空格个数,扩张字符串长度,然后从后往前遍历数组,用新旧两个指针,新的指针指向扩张后字符串末尾,旧指针指向扩张前末尾,旧指针指向字符时,将旧指针的值赋给新指针的位置,当旧指针指向空格时,新指针连续赋值为"%20"。

代码:

图3

151.翻转字符串里的单词 

文档和视频讲解:代码随想录(programmercarl.com)

状态:未ac

用时:1.5h

思路:先反转整个字符串,这样字符串的顺序是反的,但是每个单词的顺序也是反的,接下来就只需要遍历字符串,把每个单词识别然后反转该单词。也可以先双指针将所有多余空格删除,再进行两遍翻转。

代码:

图4

注:关键是每个单词之间加入空格的逻辑比较难。是每次识别到单词之前加入还是单词之后加入,图片中我注释的那一行是单词之后加入。单词之前加入只需要注意开头的单词之前不要加入空格就行了,识别第一个单词的逻辑只需要知道idx是否等于0。但是在每个单词之后加入空格,就要知道是否是最后一个单词,这不能通过idx是否等于n-1判断,因为如果字符串最后一个单词和字符串末尾之间有多个空格,那么判断的逻辑就会变得复杂,要一直判断到末尾都是空格才行。


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

文档和视频讲解:代码随想录(programmercarl.com)

状态:ac

用时:0.5h

思路:先翻转整个字符串,再分别翻转两个子字符串。

代码:

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

推荐阅读更多精彩内容

友情链接更多精彩内容