给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。如果剩余少于 k 个字符,则将剩余的所有全部反转。如果有小于 2k 但大于或等于 k 个字符,则反转前 k 个字符,并将剩余的字符保持原样。
示例:
输入: s = “abcdefg”, k = 2
输出: “bacdfeg”
要求:
该字符串只包含小写的英文字母。
给定字符串的长度和 k 在[1, 10000]范围内。
我的解答:
思路:k个反转,k个不反转,循环下去,而且不用担心索引值超出字符串的总长度(后面会有解释)。
class Solution(object):
def reverseStr(self, s, k):
"""
:type s: str
:type k: int
:rtype: str
"""
i = 0
res = ''
while i < len(s):
res = res + (s[i:i+k])[::-1] +s[i+k:i+2*k]
i += 2*k
return res
今天才发现字符串的索引不用担心溢出的问题,实例如下:
s = 'abcde'
print(s[0:7])
结果如下,不显示任何错误:
abcde
还有一个需要注意的地方是,字符串或者列表反转时不可以写成例如s[1:3:-1]的形式,字符串或者列表的切片和反转不能同时进行,具体如下:
s = 'abcde'
print(s[0:7]) #结果为 abcde
print(s[1:3:-1]) #结果为 None
print((s[1:3])[::-1]) #结果为 cb
s = [0, 1, 2, 3]
print(s[1:3:-1]) #结果为 []
print((s[1:3])[::-1]) #结果为 [2, 1]
print(s[::-1]) #结果为 [3, 2, 1, 0]