string - 使用 Julia 移动字符串
问题描述
Hackerrank 中的这个挑战是使用 Julia(programming language( 并返回字符串。我有一个接受 3 个参数的函数。
shiftStrings("字符串", leftShifts, rightShifts)
左移:字符串的单次循环旋转,其中第一个字符变为最后一个字符,所有其他字符向左移动一个索引。例如,abcde 在左移 1 次后变为 bcdea,在左移 2 次后变为 cdeab。
右移:字符串的单次循环旋转,其中最后一个字符成为第一个字符,所有其他字符都向右移动。例如,abcde 在 1 次右移后变为 eabcd,在 2 次右移后变为 deabc。
我只通过了 13 个测试用例中的 3 个。这是我的解决方案。请让我知道更好的解决方案。
请参考this,他们已经通过python完成了 如何移动字符串中的字符?- Hackerrank挑战
解决方案
如果你看一下你链接的问题,他们已经在 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 个字节)
推荐阅读
- java - Apache Cayenne“类未与 Cayenne 映射”
- sql - 仅保留审计表中每个对象的最后 5 行
- amcharts - Amchart V4 将所有现有的 amchart 一起导出到一个页面中
- python - 是否可以使用 aiohttp 运行多个 gunicorn 工作者?
- sql - 从可变长度的变量集中动态生成字符串
- php - 仅向管理员显示数组中的项目
- testing - Mocha / Chia 测试在通过/失败测试之前不等待方法链完成
- php - Nest API,单击按钮,运行更改数据的 PHP 函数,然后重新加载数据
- pandas - 围绕 Seaborn FacetGrid 轴绘制框
- python - Python3 中的 MATLAB fwind1