javascript - Shift 字符串 左右循环

标签 javascript arrays algorithm for-loop

在 Hackerrank 上,我遇到了这个问题。我有一个接受 3 个参数的函数。
示例 --> function shiftStrings("string", leftShifts, rightShifts);
LeftShifts 和 rightShifts 是整数。

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

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

我通过了 13 个测试用例中的 7 个,但其他五个超时。这是我的解决方案

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;

}

关于更好的方法的任何想法?我对编程和尝试进行算法练习比较陌生。

最佳答案

使用 slice (它可以接受负指数)可能会更容易,并且最初计算净位移,因此只需要进行一个实际的位移操作:

function getShiftedString(s, leftShifts, rightShifts) {
 // using `split('')` will result in certain unicode characters being separated incorrectly
 // use Array.from instead:
  const arr = Array.from(s);
  const netLeftShifts = (leftShifts - rightShifts) % arr.length;
  return [...arr.slice(netLeftShifts), ...arr.slice(0, netLeftShifts)]
    .join('');
}

console.log([
  getShiftedString('abc', 0, 0),
  getShiftedString('abc', 1, 0),
  getShiftedString('abc', 0, 1),
  getShiftedString('abc', 1, 1),
  getShiftedString('123456789', 0, 0),
  getShiftedString('123456789', 1, 5),
  getShiftedString('123456789', 5, 1),
  '----',
  getShiftedString('123456789', 9, 0),
  getShiftedString('123456789', 10, 0),
  getShiftedString('123456789', 0, 9),
  getShiftedString('123456789', 0, 10),
  getShiftedString("🐎👱❤", 0, 0),
  getShiftedString("🐎👱❤", 1, 0),
]);

关于javascript - Shift 字符串 左右循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55152391/

相关文章:

arrays - 查找 2 个排序数组的并集(有重复项)

javascript - 在 React JS 中获取数据时无法访问类属性

javascript - 加载 YouTube iframe 时 JQuery 效果卡顿

c++ - 如何在对象数组中打印对象的变量

algorithm - 通过将集合分成两个子集来找到可以从集合中形成的最大总和

java - 如果 Keys 在 Java HashMap 中包含相同的子字符串,则获取所有值

javascript - 在 D3JS 中更新文本标签

javascript - 下拉选项从其他下拉菜单中删除

java - 具有不同数组参数的构造函数 java

java - 生成新字符串数组的输出未按预期输出