2023-01-19 23:45阅读: 15评论: 0推荐: 0

代码随想录算法训练营第九天 字符串总结 | 双指针回顾

一刷中,暂时跳过KMP,今天状态也不太好,简单了解了一下,后面来补上。今天先整理一下字符串和双指针。

字符串

除去目前没有掌握的KMP,字符串类的题目除了各种反转类型外,还有需要扩充字符串大小的题目。目前做过的题目基本集中在第八天的内容里:

  • [[day8#字符串 lc344 反转字符串]]
  • [[day8#字符串 lc541 反转字符串II]]
  • [[day8#双指针 lc剑指Offer 05. 替换空格]]
  • [[day8#双指针 lc151 反转字符串中的单词]]
  • [[day8#lc剑指Offer 58. 左旋转字符串]]

前面两题反转字符串基本上是对题目进行简单模拟即可,尽可能在空间复杂度为O(1)的方法实现。大致思路就是以想要交换的字符串中点为对称中心,对称交换。

替换空格这道题目需要先扩充字符串长度,因为"%20"所占的字符数是" "的三倍。根据空格数目扩充长度之后,再从后向前使用双指针进行字符串更新的操作,从后向前可以避免插入单个字符时,其后面所有字符都要向后移动。

反转字符串中的单词与左旋转字符串都是思路题,基本上使用之前题目的一些思路都可以想出来,头脑要灵活一点。

双指针

目前感觉很多题目都应用到了双指针,数组,链表,字符串中都有遇到双指针

  • [[day 1#移除元素]]
  • [[day2#双指针 lc977 有序数组的平方]]
  • [[day3#双指针、递归 lc206 反转链表]]
  • [[day4#链表操作 lc19 删除链表倒数第N个节点]]
  • [[day4#环形列表 lc142 环形列表II]]
  • [[day7#双指针 lc15 三数之和]]
  • [[day7#双指针 lc18 四数之和]]
  • [[day8#双指针 lc剑指Offer 05. 替换空格]]
  • [[day8#双指针 lc151 反转字符串中的单词]]

双指针本身并不难理解,可以是一个快指针一个慢指针,也可以是一个左指针,一个右指针。双指针的目的应该是减少遍历层数,把两层循环变成一层。

本文作者:冰镇杨梅

本文链接:https://www.cnblogs.com/frozenwaxberry/p/17062326.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   冰镇杨梅  阅读(15)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起