给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。如果剩余少于 k 个字符,则将剩余的所有全部反转。如果有小于 2k 但大于或等于 k 个字符,则反转前 k 个字符,并将剩余的字符保持原样。
示例:
输入: s = "abcdefg", k = 2
输出: "bacdfeg"
要求:
- 该字符串只包含小写的英文字母。
- 给定字符串的长度和 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)