llbai
2022 年7 月 29 日 23:38
1
给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
示例 1:
输入:s = "abcdefg", k = 2
输出:"bacdfeg"
示例 2:
输入:s = "abcd", k = 2
输出:"bacd"
提示
1 <= s.length <= 104
s 仅由小写英文组成
1 <= k <= 104
任务
编写一个函数, 完成上述操作
class Solution:
def reverseStr(self, s: str, k: int) -> str:
# your code here
题目难度:简单
题目来源:541. 反转字符串 II - 力扣(LeetCode)
class Solution:
def reverseStr(self, s: str, k: int) -> str:
# your code here
li = list(s)
for i in range(len(s) // (2 * k) + 1):
k_i = 2 * k * i
li[k_i:k_i + k] = reversed(li[k_i:k_i + k])
return "".join(li)
class Solution(object):
def reverseStr(self, s, k):
"""
:type s: str
:type k: int
:rtype: str
"""
# 定义左,中,右指针
left , mid ,right =0,k,2*k
# 定义返回字符串
res = ""
while len(res)<len(s):
# 通过切片操作将字符串每隔k字符个反转一次
res += s[left:mid][::-1]+s[mid:right]
left,mid,right = left+2*k,mid+2*k,right+2*k
return res
class Solution:
def reverseStr(self, s: str, k: int) -> str:
def cut(s0: str):
if len(s0)<=k:
return s0[::-1]
elif k<len(s0)<=2*k:
return s0[k-1::-1]+s0[k:2*k]
if len(s)%(2*k)==0:
n=len(s)//(2*k)
else:
n=len(s)//(2*k)+1
x=0
res_str=''
while x<n:
if len(s)>2*k:
s1=s[:2*k]
s2=s[2*k:]
res_str+=cut(s1)
s=s2
else:
res_str+=cut(s)
x+=1
return res_str
assert Solution().reverseStr('abcdefg',2)=='bacdfeg'
assert Solution().reverseStr('abcd',2)=='bacd'