Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

คีย์บอร์ดแถวเดียวใน Python

สมมติว่ามีคีย์บอร์ดพิเศษที่มีปุ่มทั้งหมดอยู่ในแถวเดียว ดังนั้นถ้าเรามีสตริงความยาว 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
  • for i ในช่วง 0 ถึงความยาวของสตริงเลย์เอาต์ k
    • d[k[i]] := i
  • ans := 0
  • สำหรับแต่ละตัวอักษร i ใน word −
    • ans := ans + |d[i] - z|
    • z := d[i]
  • คืนค่า ans

ตัวอย่าง (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