สมมติว่ามีแป้นพิมพ์พิเศษที่มีปุ่มทั้งหมดในแถวเดียว ดังนั้นถ้าเรามีสตริงยาว 26 ที่ระบุเลย์เอาต์ของคีย์บอร์ด (ดัชนีตั้งแต่ 0 ถึง 25) ตอนแรกนิ้วของเราอยู่ที่ดัชนี 0 ในการพิมพ์อักขระ เราต้องเลื่อนนิ้วของคุณไปที่ดัชนีของอักขระถัดไป เวลาที่ใช้ในการเลื่อนนิ้วของคุณจากดัชนี i ไปยังดัชนี j แสดงเป็น |i - j| ดังนั้นหากเราต้องการพิมพ์สตริง เราต้องกำหนดฟังก์ชันเพื่อคำนวณระยะเวลาที่ใช้ในการพิมพ์ด้วยนิ้วเดียว ดังนั้นหากลำดับอินพุตคือ "abcdefghijklmnopqrstuvwxyz" และคำว่า "hello" ผลลัพธ์จะเป็น 20 จาก a ถึง h มันจะเป็น 7 จากนั้น h ถึง e คือ 3 จากนั้น e ถึง l คือ 7 ดังนั้น l ถึง l คือ 0, และ l ถึง o คือ 3 ดังนั้นผลรวมคือ 7 + 3 + 7 + 3 =20
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- สร้างแผนที่หนึ่งชื่อ d และ z :=0
- สำหรับฉันในช่วง 0 ถึงความยาวของสตริงรูปแบบแป้นพิมพ์ k
- d[k[i]] :=ฉัน
- ตอบ :=0
- สำหรับอักขระแต่ละตัว i ในคำ −
- ans :=ans + |d[i] – z|
- z :=d[i]
- คืนสินค้า
ตัวอย่าง(Python)
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
class Solution(object): def calculateTime(self, k, w): d = {} z = 0 for i in range(len(k)): d[k[i]]=i ans= 0 for i in w: ans += abs(d[i]-z) z = d[i] return ans ob1 = Solution() print(ob1.calculateTime("abcdefghijklmnopqrstuvwxyz", "hello"))
อินพุต
"abcdefghijklmnopqrstuvwxyz" "hello"
ผลลัพธ์
20