【leetcode】541. 反转字符串 II


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

示例:

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

要求:

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

 思路:

首先将字符串划分为单个,每k位进行重组,偶数位进行反转。然后单个再连成一个。

# -*- coding:utf-8 -*-
class Solution(object):
    def reverseStr(self, s, k):
        """
        :type s: str
        :type k: int
        :rtype: str
        """
        length = len(s)
        l = list(s)
        result1 = []
        result2 = []
        result = []
        # 将字符串每k个进行分割
        for i in range(0,length,k):
            temp = "".join(l[i:i + k]) # 不加join # ['a', 'b'] ['c', 'd'] ['e', 'f']
            result1.append(temp)
        # print(result1) # ['ab', 'cd', 'ef', 'g']
        # 对分割好的列表偶数位进行反转,反转完成后进行拼接
        for j,val_j in enumerate(result1):
            if(j%2==0):
                temp_val_j = val_j[::-1]
                result2.append(temp_val_j)
            else:
                result2.append(val_j)
        # print(result2)  # ['ba', 'cd', 'fe', 'g']

        # 列表拼接
        result = "".join(result2)
        return result


def main():
    s = "abcdefg"
    k = 2
    # print(s)
    myresult = Solution()
    print(myresult.reverseStr(s,k))

if __name__ == "__main__":
    main()

如何将大列表分成每个小列表

# 将字符串每k个进行分割
        for i in range(0,length,k):
            temp = "".join(l[i:i + k]) # 不加join # ['a', 'b'] ['c', 'd'] ['e', 'f']
            result1.append(temp)
        # print(result1) # ['ab', 'cd', 'ef', 'g']

reverse的用法

L = list(s)
print(L) # ['h', 'e', 'l', 'l', 'o']
L.reverse()
print(L) # ['o', 'l', 'l', 'e', 'h']
result = "".join(L) #olleh
return result

将list转为str 参考:https://blog.csdn.net/roytao2/article/details/53433373

res = " ".join(temp)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值