一刷中,暂时跳过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 反转字符串中的单词]]
双指针本身并不难理解,可以是一个快指针一个慢指针,也可以是一个左指针,一个右指针。双指针的目的应该是减少遍历层数,把两层循环变成一层。
标签:第九天,题目,day8,反转,训练营,随想录,链表,字符串,指针 From: https://www.cnblogs.com/frozenwaxberry/p/17062326.html