From c96bda46b5a0da2c552427b81043f96a691bc287 Mon Sep 17 00:00:00 2001 From: Joffily Ferreira Date: Fri, 5 Jan 2024 19:28:26 -0300 Subject: [PATCH] Add new hash table exercise --- golang/1165.go | 41 +++++++++++++++++++++++++++++++++++++++++ golang/1165_test.go | 15 +++++++++++++++ golang/README.md | 1 + 3 files changed, 57 insertions(+) create mode 100644 golang/1165.go create mode 100644 golang/1165_test.go diff --git a/golang/1165.go b/golang/1165.go new file mode 100644 index 0000000..ea8ad0f --- /dev/null +++ b/golang/1165.go @@ -0,0 +1,41 @@ +package golang + +import "math" + +/* +There is a special keyboard with all keys in a single row. + +Given a string keyboard of length 26 indicating the layout of the keyboard (indexed from 0 to 25). Initially, your finger is at index 0. To type a character, you have to move your finger to the index of the desired character. The time taken to move your finger from index i to index j is |i - j|. + +You want to type a string word. Write a function to calculate how much time it takes to type it with one finger. + + + +Example 1: + +Input: keyboard = "abcdefghijklmnopqrstuvwxyz", word = "cba" +Output: 4 +Explanation: The index moves from 0 to 2 to write 'c' then to 1 to write 'b' then to 0 again to write 'a'. +Total time = 2 + 1 + 1 = 4. +Example 2: + +Input: keyboard = "pqrstuvwxyzabcdefghijklmno", word = "leetcode" +Output: 73 +*/ + +func calculateTime(keyboard string, word string) int { + m := make(map[rune]float64) + count := 0.0 + pointer := 0.0 + + for i, ww := range keyboard { + m[ww] = float64(i) + } + + for _, w := range word { + count += math.Abs(pointer - m[w]) + pointer = m[w] + } + + return int(count) +} diff --git a/golang/1165_test.go b/golang/1165_test.go new file mode 100644 index 0000000..2b7e7fd --- /dev/null +++ b/golang/1165_test.go @@ -0,0 +1,15 @@ +package golang + +import "testing" + +func TestFirstCalculateTime(t *testing.T) { + + keyboard := "abcdefghijklmnopqrstuvwxyz" + word := "cba" + result := calculateTime(keyboard, word) + expected := 4 + + if result != expected { + t.Errorf(`Expected %v but received %v`, expected, result) + } +} diff --git a/golang/README.md b/golang/README.md index 4a7aa76..1661ebe 100644 --- a/golang/README.md +++ b/golang/README.md @@ -2,6 +2,7 @@ | -------------- | ------------------------------ | ------------------------------------------------------------------------------------ | | 2.go | Linked List | https://leetcode.com/problems/add-two-numbers/ | | 888.go | Hash table | https://leetcode.com/problems/fair-candy-swap | +| 1165.go | Hash table | https://leetcode.com/problems/single-row-keyboard/ | | 1290.go | Linked List / Bit manipulation | https://leetcode.com/problems/convert-binary-number-in-a-linked-list-to-integer | | 1539.go | Binary Search | https://leetcode.com/problems/kth-missing-positive-number/ | | 1608.go | Binary Search | https://leetcode.com/problems/special-array-with-x-elements-greater-than-or-equal-x/ |