LeetCode 541. 反转字符串 II

541. 反转字符串 II

Difficulty: 简单

给定一个字符串 s 和一个整数 k,你需要对从字符串开头算起的每隔 2k 个字符的前 k 个字符进行反转。

  • 如果剩余字符少于 k 个,则将剩余字符全部反转。
  • 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

示例:

输入: s = "abcdefg", k = 2
输出: "bacdfeg"

提示:

  1. 该字符串只包含小写英文字母。
  2. 给定字符串的长度和 k[1, 10000] 范围内。

Solution

注意两个边界条件的控制:

  1. 每隔 2k 个字符的前 k 个字符进行反转,意味着第一个k间距反转,第二个k间距不反转,奇偶
  2. 剩余字符的处理问题,题目说得很懵,一不小心就被绕进去了,如果剩余字符串不足2k个,对[i, min(i+k-1, len(s)-1)]做反转
class Solution:
    def reverseStr(self, s: str, k: int) -> str:
        l = list(s)
        for i, _ in enumerate(l):
            if (i / k) % 2 == 0:
                l = self.reverse(l, i, min(i+k-1, len(s)-1))
            else:
                continue
        return "".join(l)
        
    def reverse(self, arr, start, end):
        while start < end:
            arr[start], arr[end] = arr[end], arr[start]
            start += 1
            end -= 1
        return arr
posted @ 2021-03-27 16:45  swordspoet  阅读(50)  评论(0编辑  收藏  举报