- Leetcode 题目
- 文章讲解
- 视频讲解
题目描述
给定一个字符串 s 和一个整数 k,从字符串开头算起, 每计数至 2k 个字符,就反转这 2k 个字符中的前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
示例:
输入: s = "abcdefg", k = 2
输出: "bacdfeg"
代码示例
from typing import List
class Solution:
def reverseString(self, s: List[str]) -> None:
"""
将输入字符串列表 s 原地逆序,不返回任何值。
Parameters:
- s (List[str]): 输入的字符串列表
Returns:
- None
"""
left, right = 0, len(s) - 1
while left < right:
# 交换左右两端的字符
s[left], s[right] = s[right], s[left]
left += 1
right -= 1
# 示例代码
solution = Solution()
string_list = ["h", "e", "l", "l", "o"]
solution.reverseString(string_list)
print(string_list)
初看这道题目,我的第一反应是将字符串按照长度 k 进行切分,然后对切分后的每个部分进行反转操作。这个思路很直接,不过在看完具体的代码实现后,我发现了一种更巧妙的方式。
通过遍历字符串的过程中,我们每次只需将指针 i 向前移动 2 * k 的长度,然后判断当前是否存在需要反转的区间。这种方法避免了对每个子串进行单独处理,提高了代码的简洁性和效率。
总的来说,通过这道题目,我对字符串操作有了更深入的理解,也学到了一种更为巧妙的反转字符串的方法。在实际工作中,这样的思路将有助于更高效地处理类似的问题。