LeetCode.541 反转字符串II(python解法)

LeetCode刷题记录 专栏收录该内容
62 篇文章 1 订阅

题目

给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。如果剩余少于 k 个字符,则将剩余的所有全部反转。如果有小于 2k 但大于或等于 k 个字符,则反转前 k 个字符,并将剩余的字符保持原样。

示例:

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

要求:

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

solution_1

思路:把字符串变为列表,再翻转每个 2k 字符串的前k个,最后合并成字符串。

结果:执行用时:24 ms
排名:战胜66.33%

代码如下

class Solution(object):
    def reverseStr(self, s, k):
        """
        :type s: str
        :type k: int
        :rtype: str
        """
        sl = list(s)  # 字符串变为列表
        i = 0
        while i < len(s):
            if i + k <= len(s):  # 反转每个2k字符型的前k个
                j = i
                l = i + k - 1
                while j < l:
                    sl[j], sl[l] = sl[l], sl[j]
                    j += 1
                    l -= 1
            else:  # 剩余不足k个字符
                j = i
                l = len(s) - 1
                while j < l:
                    sl[j], sl[l] = sl[l], sl[j]
                    j += 1
                    l -= 1
            i = i + 2 * k
        return ''.join(sl)  # 列表合并为字符串

参考资料

反转字符串II

  • 0
    点赞
  • 1
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值