• 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
    
  • 相关阅读:
    BZOJ 2653 middle
    BZOJ 3207 花神的嘲讽计划Ⅰ
    BZOJ 3689 异或之
    BZOJ 3037 创世纪
    BZOJ [1264] [ AHOI2006]基因匹配Match
    BZOJ 2186 [Sdoi2008]沙拉公主的困惑
    BZOJ 3362 Navigation Nightmare
    BZOJ 3209 花神的数论题
    BZOJ 1411 ZJOI2009 硬币游戏
    【HDU1573】X问题
  • 原文地址:https://www.cnblogs.com/swordspoet/p/14586213.html
Copyright © 2020-2023  润新知