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

344.反转字符串

状态:成功完成。

初始思路:双指针交换位置就可以,如果元素个数为偶数,则刚好交换完最后一组后,left>right;如果元素个数为奇数,交换完最后一组后,left和right同时到达中位数,不需要交换。

 541. 反转字符串II 

状态:没做出来。

初始思路:这道题是以上一个题目为基础的,我的初始思路是很混乱的,我首先想到了快慢指针,感觉不太方便。然后又想到了先算有几组2k和余数为多少,但是这种我又不知道怎么确定开始和结束位置,很混乱。

看完视频讲解之后:思路很清晰 先写一个翻转字符串函数,左闭右开的去翻转。我认为最难洗想到的一点就是for循环中i每次步进2k,很厉害。自己就是思维太混乱了,以及一组一组不知道该怎么办。需要注意在python代码中传递参数时,可变对象可以直接在函数中被修改,因为它们是引用传递;而不可变对象不会直接在函数中被改变。这里可以str是不可改变的对象,所以可以先转为list,之后再join。

 卡码网:54.替换数字

状态:gpt帮助下完成。

初始思路:检查每一个s[i]如果在'a''z'之间,就跳过,如果不在的话,就是数字,就替为‘number’,python中可以转为列表之后直接替换,c++中需要用replace函数来替换 s.replace(i, 1, "number");

看完讲解之后:这里考察的就是替换,所以不应该直接用一个函数来解决。真正想考察的应该是其实很多数组填充类的问题,其做法都是先预先给数组扩容带填充后的大小,然后在从后向前进行操作。 

这么做有两个好处:

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

 最后还是用到了双指针,需要注意的就是双指针的移动问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值