LeetCode每日一题1629

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.参考解答

简单模拟题,没啥好看的。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值