สมมติว่าเรามีสตริง str ที่มีตัวอักษรภาษาอังกฤษตัวพิมพ์เล็ก และอาร์เรย์ของอาร์เรย์ arr โดยที่ arr[i] =[direction, amount] −
-
ทิศทางสามารถเป็น 0 (สำหรับกะซ้าย) หรือ 1 (สำหรับกะขวา)
-
จำนวน คือจำนวนเงินที่จะเปลี่ยนสตริง s
-
การเลื่อนไปทางซ้าย 1 หมายถึงลบอักขระตัวแรกของ s และต่อท้ายอักขระนั้นต่อท้าย
-
ในทำนองเดียวกัน การเลื่อนขวาทีละ 1 หมายถึงลบอักขระตัวสุดท้ายของ s และเพิ่มไปที่จุดเริ่มต้น
เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับสตริงเป็นอาร์กิวเมนต์แรกและอาร์เรย์ที่มีข้อมูล shift เป็นอาร์กิวเมนต์ที่สอง
ฟังก์ชันควรวนซ้ำในอาร์เรย์และทำการเปลี่ยนแปลงที่จำเป็นในสตริง และสุดท้ายส่งคืนสตริงใหม่
ตัวอย่างเช่น −
หากสตริงอินพุตและอาร์เรย์เป็น −
const str = 'abc'; const arr = [[0, 1], [1, 2]];
จากนั้นผลลัพธ์ควรเป็น −
const output = 'cab';
เพราะ
[0,1] หมายถึง เลื่อนไปทางซ้าย 1. “abc” -> “bca”
[1,2] หมายถึงเลื่อนไปทางขวาทีละ 2. “bca” -> “cab”
ตัวอย่าง
รหัสสำหรับสิ่งนี้จะเป็น −
const str = 'abc';
const arr = [[0, 1], [1, 2]];
const performShifts = (str = '', arr = []) => {
if(str.length < 2){
return str;
};
let right = 0
let left = 0;
for(let sub of arr){
if(sub[0] == 0){
left += sub[1];
}else{
right += sub[1];
};
};
if(right === left){
return str;
}
if(right > left){
right = right - left;
right = right % str.length;
return str.substring(str.length - right) + str.substring(0,
str.length - right);
}else{
left = left - right;
left = left % str.length;
return str.substring(left) + str.substring(0,left);
};
};
console.log(performShifts(str, arr)); ผลลัพธ์
และผลลัพธ์ในคอนโซลจะเป็น −
cab