Hackerrank中的这个挑战是使用Julia(编程语言)移动字符串(并返回字符串。我有一个接受3个参数的函数。
shiftStrings("string",leftShifts,rightShifts)
左移:字符串的单次循环旋转,其中第一个字符成为最后一个字符,所有其他字符左移一个索引。例如,abcde在1次左移位后变为bcdea,在2次左移后变为cdeab。
右移:字符串的单次循环旋转,其中最后一个字符成为第一个字符,所有其他字符都向右移动。例如,abcde在1次右移后变为eabcd,在2次右移后变为deabc。
我只通过了13个测试用例中的3个。这是我的解决方案。请让我知道更好的解决方案。
请参考这个,他们已经用python How to shift characters in a string? - Hackerrank challenge完成了。
发布于 2020-12-03 05:43:50
如果你看一下你链接的问题,他们已经用python给出了答案。
def getShiftedString(s, leftShifts, rightShifts):
i = (leftShifts - rightShifts) % len(s)
return s[i:] + s[:i]
如果你想把一个字符串先向右再向左移动,你只需要两者的不同。也就是说,如果你将3向右移动,3向左移动,就好像你什么都没有改变。左侧的"abcde"
3和右侧的-> "deabc"
3 -> "abcde"
。
因此,这会导致:
function shiftStrings(str, l, r)
i = mod(l - r, length(str))
str[i+1:end] * str[1:i]
end
注意:
i
是左移位的总数(取左移位的模减rightshifts)[1:i]
索引从1开始,而如果l-r==0
,则模数返回0,这就是[i+1:end]
和Julia索引的原因
如果你有Utf8编码,那么你可以这样表述它:
function shiftStrings(str, l, r)
i = mod(l - r, length(str))
indices = collect(eachindex(str))
str[indices[i+1]:end] * str[1:indices[i]]
end
Utf8
字符并不对应于每个字符1个字节,这就是字符索引与字符串索引不同的原因。(字符串索引从每个新字节开始,但是像德语"ö“这样的一些字符需要多于1个字节)
发布于 2021-04-22 23:50:29
函数getShiftedString(s,leftShifts,rightShifts)
len=length(s)
lr=mod(leftShifts,len)
rr=len-mod(rightShifts,len)
ls1=SubString(s,lr+1,length(s))
ls2=SubString(s,1,lr)
ls=ls1*ls2
rs1=SubString(ls,rr+1,length(s))
rs2=SubString(ls,1,rr)
rs=rs1*rs2
结束
https://stackoverflow.com/questions/65114518
复制相似问题