單行鍵盤
題目:我們定製了一款特殊的力扣鍵盤,所有的鍵都排列在一行上。
我們可以按從左到右的順序,用乙個長度為 26 的字串 keyboard (索引從 0 開始,到 25 結束)來表示該鍵盤的鍵位布局。
現在需要測試這個鍵盤是否能夠有效工作,那麼我們就需要個機械手來測試這個鍵盤。
最初的時候,機械手位於左邊起第乙個鍵(也就是索引為 0 的鍵)的上方。當機械手移動到某一字元所在的鍵位時,就會在終端上輸出該字元。
機械手從索引 i 移動到索引 j 所需要的時間是 |i - j|。
當前測試需要你使用機械手輸出指定的單詞 word,請你編寫乙個函式來計算機械手輸出該單詞所需的時間。
示例 1:
輸入:keyboard = 「abcdefghijklmnopqrstuvwxyz」, word = 「cba」
輸出:4
解釋:機械手從 0 號鍵移動到 2 號鍵來輸出 『c』,又移動到 1 號鍵來輸出 『b』,接著移動到 0 號鍵來輸出 『a』。
總用時 = 2 + 1 + 1 = 4.
示例 2:
輸入:keyboard = 「pqrstuvwxyzabcdefghijklmno」, word = 「leetcode」
輸出:73
keyboard.length == 26
keyboard 按某種特定順序排列,幷包含每個小寫英文本母一次。
1 <= word.length <= 10^4
word[i] 是乙個小寫英文本母
解答:(1)
首先建立乙個字典,將鍵盤的字母和鍵盤的位置組成鍵值對儲存到字典中,然後遍歷詞,讓詞中的每乙個字母在字典中查詢,利用後乙個字母和前乙個字母位置的差值的絕對值計算步數,最後再加上初始第乙個字母需要移動的步數即可。
class
solution
:def
calculatetime
(self, keyboard:
str, word:
str)
->
int:
reuslt =
0 keyboard_dict =
for i in
range
(len
(keyboard)):
keyboard_dict[keyboard[i]
]= i
for j in
range
(len
(word)-1
):reuslt +=
abs(
(keyboard_dict[word[j]
]- keyboard_dict[word[j+1]
])) reuslt += keyboard_dict[word[0]
]return reuslt
(2)使用zip函式打包字典,keyboard中的字母作為index,位置作為value,其餘部分與方法1相同
class
solution
:def
calculatetime
(self, keyboard:
str, word:
str)
->
int:
reuslt =
0 keyboard_dict =
dict
(zip
(keyboard,
[i for i in
range
(len
(keyboard))]
))for j in
range
(len
(word)-1
):reuslt +=
abs(
(keyboard_dict[word[j]
]- keyboard_dict[word[j+1]
])) reuslt += keyboard_dict[word[0]
]return reuslt
開始刷題LeetCode
今天決定開始刷題,每天至少一題,如果題目確實沒有解決出來沒有關係,但是要保證每天至少接觸了一道新的題目!一定要堅持下去,現在是個菜鳥可能會感覺有點難度,堅持下去,總有一天會好的!今天是第一天,做的第乙個題目 reverse words in a string given an input strin...
leetcode刷題歷程
難度 簡單 題目 給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 ...
LeetCode刷題總結
123 4567 891011 12 元素交換 swap a 1 a 3 sort排序 sort a.begin a.end 陣列顛倒 reverse a.begin a.end 陣列元素置為0 memset a,0,a.size 陣列取值 a.push back 定義二維陣列 vector vec...