สมมติว่าเรามีคีย์บอร์ดที่แทนที่จะเป็นแบบ qwerty แมปปุ่มตามลำดับอักษรอังกฤษ คือ abcde...
ก่อนเข้าปัญหา ต้องสมมติสองอย่าง:
- ปลายนิ้วมืออยู่ที่ดัชนี 0 คือปุ่ม 'a'
- เวลาที่ใช้ย้ายจากปุ่มหนึ่งไปอีกปุ่มคือความต่างสัมบูรณ์ของดัชนี เช่น จาก 'a' ไป 'k' ใช้เวลา |0 - 10| = 10
เราต้องเขียนฟังก์ชันที่รับสตริงอักษรอังกฤษพิมพ์เล็ก และคำนวณคืนเวลาที่ใช้พิมพ์สตริงนั้น
ตัวอย่าง
ถ้าสตริงนำเข้าคือ:
const str = 'dab';
ผลลัพธ์:
const output = 7;
เพราะการเคลื่อนที่คือ:
'a' -> 'd' = 3 'd' -> 'a' = 3 'a' -> 'b' = 1
ตัวอย่างโค้ด
const str = 'dab';
const findTimeTaken = (str = '') => {
let timeSpent = 0;
const keyboard = 'abcdefghijklmnopqrstuvwxyz';
let curr = 'a';
for(let i = 0; i < str.length; i++) {
const el = str[i];
const fromIndex = keyboard.indexOf(curr);
const toIndex = keyboard.indexOf(el);
const time = Math.abs(fromIndex - toIndex);
curr = el;
timeSpent += time;
}
return timeSpent;
};
console.log(findTimeTaken(str));
ผลลัพธ์
7