代码随想录算法训练营第七天(2)| 541. 反转字符串II

50 阅读1分钟
  • 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 的长度,然后判断当前是否存在需要反转的区间。这种方法避免了对每个子串进行单独处理,提高了代码的简洁性和效率。

总的来说,通过这道题目,我对字符串操作有了更深入的理解,也学到了一种更为巧妙的反转字符串的方法。在实际工作中,这样的思路将有助于更高效地处理类似的问题。