Given a string and an integer k, you need to reverse the first k characters for every 2k characters counting from the start of the string. If there are less than k characters left, reverse all of them. If there are less than 2k but greater than or equal to k characters, then reverse the first k characters and left the other as original.
Example:
Input: s = "abcdefg", k = 2
Output: "bacdfeg"
Restrictions:
- The string consists of lower English letters only.
- Length of the given string and k will in the range [1, 10000]
Test case:
s="abcdefg" k=2 PASS
s="abcd" k=3 PASS
s="abcdefg" k=1 PASS
s="krmyfshbspcgtesxnnljhfursyissjnsocgdhgfxubewllxzqhpasguvlrxtkgatzfybprfmmfithphckksnvjkcvnsqgsgosfxc"
k=20 Fail (expect:"jlnnxsetgcpsbhsfymrkhfursyissjnsocgdhgfxtxrlvugsaphqzxllwebukgatzfybprfmmfithphccxfsogsgqsnvckjvnskk"
jlnnxsetgcpsbhsfymrkhfursyissjnsocgdhgfxtxrlvugsaphqzxllwebukksnvjkcvnsqgsgosfxc cxfsogsgqsnvckjvnskk
jlnnxsetgcpsbhsfymrkhfursyissjnsocgdhgfxtxrlvugsaphqzxllwebukksnvjkcvnsqgsgosfxc
Actually:"txrlvugsaphqzxllwebukgatzfybprfmmfithphckksnvjkcvnsqgsgosfxccxfsogsgqsnvckjvnskk"
jlnnxsetgcpsbhsfymrkhfursyissjnsocgdhgfxubewllxzqhpasguvlrxtkgatzfybprfmmfithphckksnvjkcvnsqgsgosfxc
txrlvugsaphqzxllwebukgatzfybprfmmfithphckksnvjkcvnsqgsgosfxc
jlnnxsetgcpsbhsfymrk
txrlvugsaphqzxllwebu
class Solution:
def reverseStr(self, s, k):
"""
:type s: str
:type k: int
:rtype: str
"""
g=len(s)//(2*k)
m=len(s)%(2*k)
for i in range(g):
Piece=s[(2*i*k):(2*i+1)*k]
news="".join([c for c in reversed(Piece)])
Piece=news+s[(2*i+1)*k:]
if m <k:
news2="".join([c for c in reversed(Piece[(g*2*k):])])
Piece=Piece[:g*2*k]+news2
if m >= k and m<2*k:
news3="".join([c for c in reversed(s[(g*2*k):(g*2*k+k)])])
Piece=Piece[:g*2*k]+news3+Piece[(g*2*k+k):]
return Piece
改为:
s="krmyfshbspcgtesxnnljhfursyissjnsocgdhgfxubewllxzqhpasguvlrxtkgatzfybprfmmfithphckksnvjkcvnsqgsgosfxc"
k=20
print("len of s is", len(s))
g=len(s)//(2*k)
print("g is ",g)
m=len(s)%(2*k)
print("m is ",m)
i=0
PieceTmp=s[(i*2*k):(2*i+1)*k]
news="".join([c for c in reversed(PieceTmp)])
Piece=news+s[(2*i+1)*k:]
for i in range(1,g):
PieceTmp=s[(i*2*k):(2*i+1)*k]
news="".join([c for c in reversed(PieceTmp)])
#print("range news is ",news)
#Piece=news+s[(2*i+1)*k:]
Piece=Piece[:(2*i*k)]+news+Piece[(2*i*k+2*k):]
print("g>0 i range Piece is ",Piece)
if m <k:
if g>0:
news2="".join([c for c in reversed(Piece[(g*2*k):])])
Piece=Piece[:g*2*k]+news2
if k==1:
Piece=s
else:
Piece="".join([c for c in reversed(s)])
print("Piece is",Piece)
if m >= k and m<2*k:
print("We are here: m>=k")
news3="".join([c for c in reversed(s[(g*2*k):(g*2*k+k)])])
if g >0 :
Piece=Piece[:g*2*k]+news3+Piece[(g*2*k+k):]
if k==1:
Piece=s
if g==0:
Piece=news3+s[k:]
return Piece