【代码随想录刷题总结】leetcode541-反转字符串II
引言
大家好啊,我是前端拿破轮😁。
跟着卡哥学算法有一段时间了,通过代码随想录的学习,受益匪浅,首先向卡哥致敬🫡。
但是在学习过程中我也发现了一些问题,很多当时理解了并且AC的题目过一段时间就又忘记了,或者不能完美的写出来。根据费曼学习法,光有输入的知识掌握的是不够牢靠的,所以我决定按照代码随想录的顺序,输出自己的刷题总结和思考。同时,由于以前学习过程使用的是JavaScript,而在2025年的今天,TypeScript几乎成了必备项,所以本专题内容也将使用TypeScript,来巩固自己的TypeScript语言能力。
题目信息
反转字符串II
给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
题目分析
不少同学看到这个题感觉很懵,不知道如何下手,其实这个题和上一个题目反转字符串实际上是一样的,只不过本题要求每2k个就翻转前k个。处理起来很简单,只需要在遍历左指针位置的时候将步长设置为2k即可。
题解
1 | function reverseStr(s: string, k: number): string { |
时间复杂度: $O(N * K)$
空间复杂度: $O(N)$,需要一个数组来保存分割后的字符串,因为在JS中,字符串是不可变的。
总结
很多时候我们写for循环已经惯性思维了步长就是1,习惯性地写上i++。在本题中,只需要将步长改为2*k即可,在确定右指针位置的时候记得要取结尾位置和理论位置的最小值,防止访问越界。
好了,这篇文章就到这里啦,如果对您有所帮助,欢迎点赞,收藏,分享👍👍👍。您的认可是我更新的最大动力。由于笔者水平有限,难免有疏漏不足之处,欢迎各位大佬评论区指正。
往期推荐✨✨✨
- 面试官:三数之和写的不错,来个四数之和吧。我:。。。🤪🤪🤪
- 😏😏😏不会吧,不会吧,你不会以为三数之和只是比两数之和多了一个数吧?
- 女朋友要和我分手?!!居然是因为交不出赎金信,不会用哈希表😭😭😭
- 🤡🤡🤡面试官:就你这还每天刷leetcode?连四数相加和四数之和都分不清!
- 不是吧不是吧,leetcode第一题我就做不出来?😭😭😭
- 🤯🤯🤯我人麻了!!!面试官:怎么判断链表是否有环?用两种不同的方法😏😏😏
- 🤡🤡🤡字母异位词是个啥?用哈希还是排序?
- CJS和ESM两种模块化标准的异同分析
- 🤔5202年了,你不会还不知道WebAssembly吧?
- 🚀🚀🚀实在受不了混乱的提交——我使用了commitlint和commitizen
- 当我用deepwiki来学习React源码
- 【🚀🚀🚀代码随想录刷题总结】leetcode707-设计链表
我是前端拿破轮,关注我,一起学习前端知识,我们下期见!



