Giả sử có một bàn phím đặc biệt với tất cả phím nằm trên một hàng. Cho chuỗi độ dài 26 chỉ bố cục bàn phím (chỉ số 0-25), ngón tay ban đầu ở chỉ số 0. Để gõ một ký tự, phải di chuyển ngón tay đến chỉ số của ký tự đó. Thời gian di chuyển từ chỉ số i đến j là |i - j|. Cần tính thời gian gõ một chuỗi. Ví dụ: bàn phím "abcdefghijklmnopqrstuvwxyz", từ "hello" cho kết quả 20 (a→h: 7, h→e: 3, e→l: 7, l→l: 0, l→o: 3, tổng = 20).
Để giải quyết:
- Tạo map d, z := 0
- Với i từ 0 đến độ dài chuỗi bàn phím k: d[k[i]] := i
- ans := 0
- Với mỗi ký tự i trong từ:
- ans := ans + |d[i] - z|
- z := d[i]
- Trả về ans
Ví dụ (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"))
Đầu vào
"abcdefghijklmnopqrstuvwxyz" "hello"
Kết quả
20