题目
给定一个字符串 s 和一个整数 k,从字符串开头算起,每 2k 个字符反转前 k 个字符。
- 如果剩余字符少于 k 个,则将剩余字符全部反转。
- 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
示例
示例1
输入: s = “abcdefg”, k = 2 输出: “bacdfeg”
示例2
输入: s = “abcd”, k = 2 输出: “bacd”
关键思路
输入字符串由若干个长度为2k的子字符串和至多一个长度小于2k的子字符串组成,将这些子字符串放入一个循环进行处理。在这个循环中,存在两种普遍情况,我们将前k个字符和后k个字符分开处理。
代码实现
class Solution(object):
def reverseStr(self, s, k):
"""
:type s: str
:type k: int
:rtype: str
"""
count = 0
unit = ""
result = ""
for c in s:
count = count + 1
if count <= k:
unit = c + unit
elif count > k and count <= k*2:
unit = unit + c
if count == k*2:
result = result + unit
count = 0
unit = ""
result = result + unit
return result
if __name__ == "__main__":
obj = Solution()
s = input()
k = input()
result = obj.reverseStr(s, k)
print(result)
运行结果
bacdfeg bacd
改进思路
在查看官方参考答案后,发现官方给到的代码十分精简,直接利用列表的区间特性和reversed()函数来实现功能。
class Solution:
def reverseStr(self, s: str, k: int) -> str:
t = list(s)
for i in range(0, len(t), 2 * k):
t[i: i + k] = reversed(t[i: i + k])
return "".join(t)
链接
https://leetcode-cn.com/problems/reverse-string-ii
|