來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/slowest-key
題目描述:
LeetCode 設(shè)計(jì)了一款新式鍵盤(pán)杠愧,正在測(cè)試其可用性。測(cè)試人員將會(huì)點(diǎn)擊一系列鍵(總計(jì) n 個(gè)),每次一個(gè)肉微。
給你一個(gè)長(zhǎng)度為 n 的字符串 keysPressed 腻脏,其中 keysPressed[i] 表示測(cè)試序列中第 i 個(gè)被按下的鍵桅滋。releaseTimes 是一個(gè)升序排列的列表绑青,其中 releaseTimes[i] 表示松開(kāi)第 i 個(gè)鍵的時(shí)間勘伺。字符串和數(shù)組的 下標(biāo)都從 0 開(kāi)始 锥惋。第 0 個(gè)鍵在時(shí)間為 0 時(shí)被按下昌腰,接下來(lái)每個(gè)鍵都 恰好 在前一個(gè)鍵松開(kāi)時(shí)被按下。
測(cè)試人員想要找出按鍵 持續(xù)時(shí)間最長(zhǎng) 的鍵膀跌。第 i 次按鍵的持續(xù)時(shí)間為 releaseTimes[i] - releaseTimes[i - 1] 遭商,第 0 次按鍵的持續(xù)時(shí)間為 releaseTimes[0] 。
注意淹父,測(cè)試期間株婴,同一個(gè)鍵可以在不同時(shí)刻被多次按下,而每次的持續(xù)時(shí)間都可能不同暑认。
請(qǐng)返回按鍵 持續(xù)時(shí)間最長(zhǎng) 的鍵困介,如果有多個(gè)這樣的鍵,則返回 按字母順序排列最大 的那個(gè)鍵蘸际。
示例 1:
輸入:releaseTimes = [9,29,49,50], keysPressed = "cbcd"
輸出:"c"
解釋?zhuān)喊存I順序和持續(xù)時(shí)間如下:
按下 'c' 座哩,持續(xù)時(shí)間 9(時(shí)間 0 按下,時(shí)間 9 松開(kāi))
按下 'b' 粮彤,持續(xù)時(shí)間 29 - 9 = 20(松開(kāi)上一個(gè)鍵的時(shí)間 9 按下根穷,時(shí)間 29 松開(kāi))
按下 'c' ,持續(xù)時(shí)間 49 - 29 = 20(松開(kāi)上一個(gè)鍵的時(shí)間 29 按下导坟,時(shí)間 49 松開(kāi))
按下 'd' 屿良,持續(xù)時(shí)間 50 - 49 = 1(松開(kāi)上一個(gè)鍵的時(shí)間 49 按下,時(shí)間 50 松開(kāi))
按鍵持續(xù)時(shí)間最長(zhǎng)的鍵是 'b' 和 'c'(第二次按下時(shí))惫周,持續(xù)時(shí)間都是 20
'c' 按字母順序排列比 'b' 大尘惧,所以答案是 'c'
示例 2:
輸入:releaseTimes = [12,23,36,46,62], keysPressed = "spuda"
輸出:"a"
解釋?zhuān)喊存I順序和持續(xù)時(shí)間如下:
按下 's' ,持續(xù)時(shí)間 12
按下 'p' 递递,持續(xù)時(shí)間 23 - 12 = 11
按下 'u' 喷橙,持續(xù)時(shí)間 36 - 23 = 13
按下 'd' 啥么,持續(xù)時(shí)間 46 - 36 = 10
按下 'a' ,持續(xù)時(shí)間 62 - 46 = 16
按鍵持續(xù)時(shí)間最長(zhǎng)的鍵是 'a' 贰逾,持續(xù)時(shí)間 16
代碼實(shí)現(xiàn):
class Solution {
public char slowestKey(int[] rt, String kp) {
int n = rt.length, idx = 0, max = rt[0];
for (int i = 1; i < n; i++) {
int cur = rt[i] - rt[i - 1];
if (cur > max) {
idx = i; max = cur;
} else if (cur == max && kp.charAt(i) > kp.charAt(idx)) {
idx = i;
}
}
return kp.charAt(idx);
}
}