|
| 1 | +# 1629、按键时间持续最长的键 |
| 2 | + |
| 3 | +LeetCode 设计了一款新式键盘,正在测试其可用性。测试人员将会点击一系列键(总计 n 个),每次一个。 |
| 4 | + |
| 5 | +给你一个长度为 n 的字符串 keysPressed ,其中 keysPressed[i] 表示测试序列中第 i 个被按下的键。releaseTimes 是一个升序排列的列表,其中 releaseTimes[i] 表示松开第 i 个键的时间。字符串和数组的 **下标都从 0 开始** 。第 0 个键在时间为 0 时被按下,接下来每个键都 恰好 在前一个键松开时被按下。 |
| 6 | + |
| 7 | +测试人员想要找出按键 **持续时间最长** 的键。第 i 次按键的持续时间为 releaseTimes[i] - releaseTimes[i - 1] ,第 0 次按键的持续时间为 releaseTimes[0] 。 |
| 8 | + |
| 9 | +注意,测试期间,同一个键可以在不同时刻被多次按下,而每次的持续时间都可能不同。 |
| 10 | + |
| 11 | +请返回按键 **持续时间最长** 的键,如果有多个这样的键,则返回 **按字母顺序排列最大** 的那个键。 |
| 12 | + |
| 13 | + |
| 14 | + |
| 15 | +示例 1: |
| 16 | + |
| 17 | +``` |
| 18 | +输入:releaseTimes = [9,29,49,50], keysPressed = "cbcd" |
| 19 | +输出:"c" |
| 20 | +解释:按键顺序和持续时间如下: |
| 21 | +按下 'c' ,持续时间 9(时间 0 按下,时间 9 松开) |
| 22 | +按下 'b' ,持续时间 29 - 9 = 20(松开上一个键的时间 9 按下,时间 29 松开) |
| 23 | +按下 'c' ,持续时间 49 - 29 = 20(松开上一个键的时间 29 按下,时间 49 松开) |
| 24 | +按下 'd' ,持续时间 50 - 49 = 1(松开上一个键的时间 49 按下,时间 50 松开) |
| 25 | +按键持续时间最长的键是 'b' 和 'c'(第二次按下时),持续时间都是 20 |
| 26 | +'c' 按字母顺序排列比 'b' 大,所以答案是 'c' |
| 27 | +``` |
| 28 | + |
| 29 | + |
| 30 | +示例 2: |
| 31 | + |
| 32 | +``` |
| 33 | +输入:releaseTimes = [12,23,36,46,62], keysPressed = "spuda" |
| 34 | +输出:"a" |
| 35 | +解释:按键顺序和持续时间如下: |
| 36 | +按下 's' ,持续时间 12 |
| 37 | +按下 'p' ,持续时间 23 - 12 = 11 |
| 38 | +按下 'u' ,持续时间 36 - 23 = 13 |
| 39 | +按下 'd' ,持续时间 46 - 36 = 10 |
| 40 | +按下 'a' ,持续时间 62 - 46 = 16 |
| 41 | +按键持续时间最长的键是 'a' ,持续时间 16 |
| 42 | +``` |
| 43 | + |
| 44 | + |
| 45 | +提示: |
| 46 | + |
| 47 | +releaseTimes.length == n |
| 48 | +keysPressed.length == n |
| 49 | +2 <= n <= 1000 |
| 50 | +1 <= releaseTimes[i] <= 109 |
| 51 | +releaseTimes[i] < releaseTimes[i+1] |
| 52 | +keysPressed 仅由小写英文字母组成 |
| 53 | + |
| 54 | +来源:力扣(LeetCode) |
| 55 | +链接:https://leetcode-cn.com/problems/slowest-key |
| 56 | +著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 |
| 57 | + |
| 58 | +c语言代码 |
| 59 | + |
| 60 | +```c |
| 61 | +char slowestKey(int* releaseTimes, int releaseTimesSize, char * keysPressed){ |
| 62 | + char ret = keysPressed[0]; |
| 63 | + int maxTime = releaseTimes[0]; |
| 64 | + for(int i = 1;i<releaseTimesSize;i++){ |
| 65 | + int time = releaseTimes[i]-releaseTimes[i-1]; |
| 66 | + if((time)>maxTime||(time==maxTime&&keysPressed[i]>ret)){ |
| 67 | + maxTime = releaseTimes[i]-releaseTimes[i-1]; |
| 68 | + ret = keysPressed[i]; |
| 69 | + } |
| 70 | + } |
| 71 | + return ret; |
| 72 | +} |
| 73 | +``` |
| 74 | +
|
| 75 | +java实现 |
| 76 | +
|
| 77 | +```java |
| 78 | +class Solution { |
| 79 | + public char slowestKey(int[] releaseTimes, String keysPressed) { |
| 80 | + int maxTime = releaseTimes[0]; |
| 81 | + char []keysPressed2 = keysPressed.toCharArray(); |
| 82 | + char k = keysPressed2[0]; |
| 83 | + for(int i = 1;i<releaseTimes.length;i++){ |
| 84 | + if((releaseTimes[i]-releaseTimes[i-1])>maxTime||((releaseTimes[i]-releaseTimes[i-1])==maxTime)&&keysPressed2[i]>k){ |
| 85 | + k = keysPressed2[i]; |
| 86 | + maxTime = releaseTimes[i]-releaseTimes[i-1]; |
| 87 | + } |
| 88 | + } |
| 89 | + return k; |
| 90 | +
|
| 91 | + } |
| 92 | +} |
| 93 | +``` |
| 94 | + |
0 commit comments