Hackerrank中的这个挑战是使用Python移动字符串并返回字符串。我有一个接受3个参数的函数。
shiftStrings("string", leftShifts, rightShifts);
leftShifts
& rightShifts
是大于0的整数,"string"
始终是小写字符。
左移:字符串的单次循环旋转,其中第一个字符成为最后一个字符,所有其他字符左移一个索引。例如,abcde在1次左移位后变为bcdea,在2次左移后变为cdeab。
右移:字符串的单次循环旋转,其中最后一个字符成为第一个字符,所有其他字符都向右移动。例如,abcde在1次右移后变为eabcd,在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
发布于 2020-01-09 07:49:48
def getShiftedString(s, leftShifts, rightShifts):
i = (leftShifts - rightShifts) % len(s)
return s[i:] + s[:i]
发布于 2020-01-09 07:36:01
您应该更改以下行:
l2 = s[len(s)-leftShifts:]
至
l2 = s[leftShifts:]
您还可以在一行中实现该函数:
def getShiftedString(s, leftShifts, rightShifts):
return (s*3)[len(s)+rightShifts-leftShifts:2*len(s)+rightShifts-leftShifts]
发布于 2020-11-25 15:04:07
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
https://stackoverflow.com/questions/59655212
复制相似问题