【发布时间】:2019-08-04 18:00:02
【问题描述】:
在 Hackerrank 我遇到了这个问题。我有一个接受 3 个参数的函数。 示例 --> function shiftStrings("string", leftShifts, rightShifts); LeftShifts 和 rightShifts 是整数。
左移:字符串的单次循环旋转,其中第一个字符变为最后一个字符,所有其他字符向左移动一个索引。例如,abcde 左移一次后变为 bcdea,左移两次后变为 cdeab。
右移:字符串的单次循环旋转,其中最后一个字符成为第一个字符,所有其他字符都向右移动。例如,abcde 右移一次变为 eabcd,右移两次变为 deabc。
我通过了 13 个测试用例中的 7 个,但其他 5 个已超时。这是我的解决方案
function getShiftedString(s, leftShifts, rightShifts) {
// Write your code here
let arr = s.split('');
for (let i = 0; i < leftShifts; i++) {
let arrItem = arr[0];
arr.shift();
arr.push(arrItem);
};
for (let i = 0; i < rightShifts; i++) {
let arrItem = arr[arr.length - 1];
arr.pop();
arr.unshift(arrItem);
};
const finished = arr.join('');
return finished;
}
有什么更好的方法来做到这一点吗?我对编程和尝试进行算法练习比较陌生。
【问题讨论】:
-
嗯,一个优化是
rightShifts - leftShifts,下一个优化只是两个单片,.. 例如..abcdef左移2可以是cdef+ab,只有2个简单的字符串切片的..哦,您可能想要对班次进行模数,例如。长度为 5 的字符串左移 6 次与左移 1 次相同。
标签: javascript arrays algorithm for-loop