代码随想录算法训练营第七天打卡| 344.反转字符串 541. 反转字符串II 卡码网:54.替换数字

344.反转字符串

第一题比较简单,用到了双指针的思想,这里要注意指针移动循环停止的条件。

541. 反转字符串II

这一题用到了上一题目的解答,将反转一段字符串的操作写成一个reverse函数。

其次就是有关这个每隔2k个字符前k个字符如何去写

一些同学可能为了处理逻辑:每隔2k个字符的前k的字符,写了一堆逻辑代码或者再搞一个计数器,来统计2k,再统计前k个字符。

其实在遍历字符串的过程中,只要让 i += (2 * k),i 每次移动 2 * k 就可以了,然后判断是否需要有反转的区间。

因为要找的也就是每2 * k 区间的起点,这样写,程序会高效很多。

卡码网:54.替换数字

这一题有两个需要注意的点,一个是将数字替换成number后,整个数组的size也要随之变化

第二个就是改变数组的操作要从后向前进行,这里注意,从后向前替换数字字符,也是一个双指针法

为什么要从后向前填充,从前向后填充不行么?

从前向后填充就是O(n^2)的算法了,因为每次添加元素都要将添加元素之后的所有元素整体向后移动。

其实很多数组填充类的问题,其做法都是先预先给数组扩容带填充后的大小,然后在从后向前进行操作。

这么做有两个好处:

  1. 不用申请新数组。
  2. 从后向前填充元素,避免了从前向后填充元素时,每次添加元素都要将添加元素之后的所有元素向后移动的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值