344.反转字符串
第一题比较简单,用到了双指针的思想,这里要注意指针移动循环停止的条件。
541. 反转字符串II
这一题用到了上一题目的解答,将反转一段字符串的操作写成一个reverse函数。
其次就是有关这个每隔2k个字符和前k个字符如何去写
一些同学可能为了处理逻辑:每隔2k个字符的前k的字符,写了一堆逻辑代码或者再搞一个计数器,来统计2k,再统计前k个字符。
其实在遍历字符串的过程中,只要让 i += (2 * k),i 每次移动 2 * k 就可以了,然后判断是否需要有反转的区间。
因为要找的也就是每2 * k 区间的起点,这样写,程序会高效很多。
卡码网:54.替换数字
这一题有两个需要注意的点,一个是将数字替换成number后,整个数组的size也要随之变化。
第二个就是改变数组的操作要从后向前进行,这里注意,从后向前替换数字字符,也是一个双指针法
为什么要从后向前填充,从前向后填充不行么?
从前向后填充就是O(n^2)的算法了,因为每次添加元素都要将添加元素之后的所有元素整体向后移动。
其实很多数组填充类的问题,其做法都是先预先给数组扩容带填充后的大小,然后在从后向前进行操作。
这么做有两个好处:
- 不用申请新数组。
- 从后向前填充元素,避免了从前向后填充元素时,每次添加元素都要将添加元素之后的所有元素向后移动的问题。