给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。如果剩余少于 k 个字符,则将剩余的所有全部反转。如果有小于 2k 但大于或等于 k 个字符,则反转前 k 个字符,并将剩余的字符保持原样。
示例:
输入: s = "abcdefg", k = 2
输出: "bacdfeg"
思路:切片 + 栈
切片是根据题目需求,将偶数位置的切片进行反转,反转用到了栈先进后出的特点,将每个小字符串按照字符依次放入栈中之后再依次取出
class Solution(object):
def reverseStr(self, s, k):
"""
:type s: str
:type k: int
:rtype: str
"""
slice_list = list()
res_list = list()
index = 0
while index < len(s):
slice_list.append(s[index:index+k])
index += k
# 将偶数切片索引的翻转
for i in range(len(slice_list)):
if i % 2 == 1:
res_list.append(slice_list[i])
else:
stack = [j for j in slice_list[i]] # 利用栈来翻转
reverse = ""
for k in range(len(stack)):
reverse += stack.pop()
res_list.append(reverse)
return ("".join(res_list))