在Hackerrank,我遇到了这个问题。我有一个接受3个参数的函数。示例 - > function shiftStrings(“string”,leftShifts,rightShifts);LeftShifts和rightShifts是整数。…
它可能更容易使用 slice (可接受负数指标),并初步计算净班次,因此只需要进行一次实际换档操作:
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), ]);
这是我使用拼接和扩展运算符进行左移和右移的解决方案。
//left let str="abcde"; let arr=Array.from(str); let left_shift=2; let x=arr.splice(0, left_shift); console.log([...arr,x].flat().join("")); //right let arr1=Array.from(str).reverse(); let right_shift=2; let x1=arr1.splice(0, right_shift); console.log([...arr1,x1].flat().reverse().join(""));