Python 如何移动字符串中的字符?-黑客挑战
Hackerrank中的挑战是使用Python移动字符串并返回字符串。我有一个接受3个参数的函数Python 如何移动字符串中的字符?-黑客挑战,python,string,Python,String,Hackerrank中的挑战是使用Python移动字符串并返回字符串。我有一个接受3个参数的函数 shiftStrings("string", leftShifts, rightShifts); leftShifts&rightShifts为整数>0,“字符串”始终为小写字符 左移:字符串的单个循环旋转,其中第一个字符变为最后一个字符,所有其他字符向左移动一个索引。例如,abcde在左移1次后变为bcdea,而cdeab在左移2次后变为cdeab 右移:字符串的单个循环旋转,其中最后一个字符
shiftStrings("string", leftShifts, rightShifts);
leftShifts
&rightShifts
为整数>0,“字符串”
始终为小写字符
左移:字符串的单个循环旋转,其中第一个字符变为最后一个字符,所有其他字符向左移动一个索引。例如,abcde在左移1次后变为bcdea,而cdeab在左移2次后变为cdeab
右移:字符串的单个循环旋转,其中最后一个字符成为第一个字符,所有其他字符向右移动。例如,abcde在1次右移后变为eabcd,而deabc在2次右移后变为deabc
我只通过了14个测试用例中的4个。这是我的解决办法。请告诉我更好的解决办法
def getShiftedString(s, leftShifts, rightShifts):
# Left shift the string
l1 = s[0:leftShifts]
l2 = s[len(s)-leftShifts:]
s1 = l2+l1
# Right shift the string
r1 = s1[0:len(s)-rightShifts]
r2 = s1[len(s)-rightShifts:]
s = r2+r1
return s
您应该更改以下行:
l2 = s[len(s)-leftShifts:]
到
您还可以在一行中实现该功能:
def getShiftedString(s, leftShifts, rightShifts):
return (s*3)[len(s)+rightShifts-leftShifts:2*len(s)+rightShifts-leftShifts]
def getShiftedString(s、leftShifts、righshifts):
总移位=左移位-右移位
如果len(s)<总移位:
总移位=总移位-长度
如果总移位>0:
s=s[总移位:][s[:总移位]
elif总位移<0:
s=s[总移位:][s[:总移位]
其他:
返回s
返回s
到底是什么问题?这是我的解决办法。请让我知道更好的解决方案你真的希望人们为你做一切吗?变量和函数名称通常应遵循带有下划线的小写形式。我尝试了下面的输入,但输出不符合预期。shift=getShiftedString('abcdefghijklmnopqrstuv',5,2)打印(shift)是,更改l2=s[leftshift:]按预期工作
def getShiftedString(s, leftShifts, rightShifts):
return (s*3)[len(s)+rightShifts-leftShifts:2*len(s)+rightShifts-leftShifts]
def getShiftedString(s, leftShifts, rightShifts):
i = (leftShifts - rightShifts) % len(s)
return s[i:] + s[:i]
def getShiftedString(s, leftShifts, rightShifts):
total_shift = leftShifts - rightShifts
if len(s) < total_shift:
total_shift = total_shift - len(s)
if total_shift > 0:
s = s[total_shift:] + s[:total_shift]
elif total_shift < 0:
s = s[total_shift:] + s[:total_shift]
else:
return s
return s