LeetCode每日一题1629
2022年1月9日
题目描述
题目详情如下:题目详情链接
提交记录:
解答
1.个人解答:
其实看到这个东西的时候感觉还挺好弄的,也没有技巧,就是维护一个长度为26的用来存储每个小写字母对应键的最大按压时间的数组pressTime
就可以了。
在刷新的过程中,也不断刷新一个用来存储最大按压时间对应的字母的一个变量char result
- 如果对于相同字母,碰到了按压时间更长的情况,则刷新
pressTime
数组中对应位置的数值 - 如果该长度大于当前记录的最大长度,则更新变量
result
- 如果该长度等于当前记录的最大长度,如果对应的ASCII码更大,也更新变量
result
- 否则变量
result
不变 - 重复上面的步骤,知道全部遍历完提供信息的数组
releaseTimes
对应的代码如下:
class Solution {
public:
char slowestKey(vector<int>& releaseTimes, string keysPressed) {
int len = releaseTimes.size();
int *pressTime = new int [26];
for(int i = 0; i < 26; i++)
pressTime[i] = 0; // 初始化记录时间的数组
char result = keysPressed[0];
pressTime[result - 'a'] = releaseTimes[0];
for(int i = 1; i < len; i++)
{// 开始统计信息
int tempPressTime = releaseTimes[i] - releaseTimes[i-1]; // 记录第i次按压的时间
int tempChar = keysPressed[i]; // 第i次按压是什么键
pressTime[tempChar - 'a'] = max(tempPressTime, pressTime[tempChar - 'a']);
if(pressTime[tempChar - 'a'] > pressTime[result - 'a']){
result = tempChar;
}
if(pressTime[tempChar - 'a'] == pressTime[result - 'a']){
// 出现按压次数相同的情况
if(tempChar >= result){
result = tempChar;
}
}
}
return result;
}
};
2.参考解答
简单模拟题,没啥好看的。。。