【问题标题】:Shifting string using Julia使用 Julia 移动字符串
【发布时间】:2021-03-14 19:00:50
【问题描述】:

Hackerrank 中的这个挑战是使用 Julia(programming language() 转换字符串并返回字符串。我有一个接受 3 个参数的函数。

shiftStrings("字符串", leftShifts, rightShifts)

左移:字符串的单次循环旋转,其中第一个字符变为最后一个字符,所有其他字符向左移动一个索引。例如,abcde 左移 1 次后变为 bcdea,左移 2 次后变为 cdeab。

右移:字符串的单次循环旋转,其中最后一个字符成为第一个字符,所有其他字符都向右移动。例如,abcde 右移 1 次后变为 eabcd,右移 2 次后变为 deabc。

我只通过了 13 个测试用例中的 3 个。这是我的解决方案。请告诉我更好的解决方案。

请参考这个,他们是由python完成的 How to shift characters in a string? - Hackerrank challenge

【问题讨论】:

  • 这篇文章需要整理一下,我不明白,你的看法在哪里?

标签: string julia


【解决方案1】:

如果您查看链接的问题,他们已经在 python 中找到了答案。

def getShiftedString(s, leftShifts, rightShifts):
    i = (leftShifts - rightShifts) % len(s)
    return s[i:] + s[:i]

如果你想将一个字符串向右移动,然后向左移动,你只需要两者的区别。 IE。如果你向右移动 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 是左移的总数(你取左移的模减去右移)
  • Python 索引从 0 开始,而 Julia 索引从 1 开始,而如果 l-r==0 取模返回 0,这就是为什么 [i+1:end][1:i]

如果你有 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 个字节)

【讨论】:

  • 请注意,此答案对 UTF8 无效;你需要按字符索引(例如prevind/nextind)。
【解决方案2】:

函数 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
    
  

结束

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-03-28
  • 1970-01-01
  • 2019-04-26
  • 2013-12-13
  • 2017-01-22
  • 2016-12-17
  • 2021-10-05
  • 1970-01-01
相关资源
最近更新 更多