刷题建议
- 代码随想录目前基本都有了视频讲解,一定要先看视频,事半功倍。
- 写博客,将自己的感悟沉淀下来,不然会忘
- 大家提问的时候,记得要把问题描述清楚,自己在哪一步遇到了问题,做了哪些调试,而不要只是把代码甩出来,这样方便大家帮忙快速定位问题。
博客内容:(博客记录以及打卡格式)
技巧总结
- Python切片是十分有用的,参考:https://www.liaoxuefeng.com/wiki/1016959663602400/1017269965565856
- Python不需要使用Temp,直接交换就行,
s[left], s[right] = s[right], s[left]
- 字符串不可改变,如果要改变字符串的值或者切片,先将字符串转换为字符列表,最后
return ''.join(res)
,重新返回字符串 - 对于字符串s = ‘abc’,如果使用s[0:999] ===> ‘abc’。字符串末尾如果超过最大长度,则会返回至字符串最后一个值,这个特性可以避免一些边界条件的处理。
- 使用range(start, end, step)来确定需要调换的初始位置
- 切片是左闭右开
- s.split和s.strip的使用
- reverse方法是list类型
- 。 因为字符串是不可变类型,所以反转单词的时候,需要将其转换成列表,然后通过join函数再将其转换成字符串,所以空间复杂度不是O(1)
10.遇到字符串反转的题目考虑灵活运用reverse
344.反转字符串
自己看到题目的第一想法
- 双指针,使用temp交换s[i]和s[len(s)-i-1]的值
看完代码随想录之后的想法
- Python不需要使用temp,直接交换就行
自己实现过程中遇到哪些困难
相关题目
541. 反转字符串II
自己看到题目的第一想法
- 复杂逻辑判断
看完代码随想录之后的想法
- 直接在循环里,每次跳i += 2k,每隔 2k 个字符的前 k 个字符进行反转
- 剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符
- 剩余字符少于 k 个,则将剩余字符全部反转。
- 注意“技巧总结”
替换数字
自己看到题目的第一想法
- 将字符串转为字符数组,遍历list
isdigit
判断是否为数字,如果是数字,则nums[i] = number
return ''.join(res)
看完代码随想录之后的想法
151.翻转字符串里的单词
自己看到题目的第一想法
- 先去除多余空格,每个单词中间留一个
- 想办法将单词反转,无想法
看完代码随想录之后的想法
- 移除多余空格
- 将整个字符串反转(
Hello World ==》dlroW olleH
) - 将每个单词再反转一遍(
dlroW olleH==>Wordl Hello
) - 去除空格,空格也是一种元素==>参考“移除元素”https://programmercarl.com/0027.移除元素.html,设置快慢指针
- 移除多余空格:fast遍历字符串,slow指针指向结果,只要
s[fast] != ' '
,while(s[slow] = s[fast]),直到s[fast]的空格 - 然后将slow后面加一位空格
自己实现过程中遇到哪些困难
今日收获,记录一下自己的学习时长
55.右旋转字符串
自己看到题目的第一想法
- 将字符串转变为list,拿到list最后两个数加入新的list,然后在当前list删除这两个数
- 遍历原本的list,全部append到新list内
- 最后return ‘’.join(list)
看完代码随想录之后的想法
- 增加难度:“不能申请额外空间,只能在本串上操作”
- 先反转全部字符串
- 再反转字符串前k个
- 再反转字符串后len-k个
- Python用切片就行,其他语言可以用reverse函数,Python的reverse是反转List的
自己实现过程中遇到哪些困难
n = int(input())
s = input()
# 先反转前一段,长度为 len - n
s = s[:len(s) - n][::-1] + s[len(s) - n:][::-1]
# 整体反转
s = s[::-1]
print(s)
今日收获,记录一下自己的学习时长
今日学习:5个小时