首页 > 解决方案 > 使用 Julia 移动字符串

问题描述

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

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

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

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

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

请参考this,他们已经通过python完成了 如何移动字符串中的字符?- Hackerrank挑战

标签: stringjulia

解决方案


如果你看一下你链接的问题,他们已经在 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是左移的总量(你取左移的模减去右移)
  • Python 索引从 0 开始,而 Julia 索引从 1 开始,而模返​​回 0 if l-r==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 个字节)


推荐阅读