当前位置: 首页 > news >正文

leetcode:1629. 按键持续时间最长的键(python3解法)

难度:简单

LeetCode 设计了一款新式键盘,正在测试其可用性。测试人员将会点击一系列键(总计 n 个),每次一个。

给你一个长度为 n 的字符串 keysPressed ,其中 keysPressed[i] 表示测试序列中第 i 个被按下的键。releaseTimes 是一个升序排列的列表,其中 releaseTimes[i] 表示松开第 i 个键的时间。字符串和数组的 下标都从 0 开始 。第 0 个键在时间为 0 时被按下,接下来每个键都 恰好 在前一个键松开时被按下。

测试人员想要找出按键 持续时间最长 的键。第 i 次按键的持续时间为 releaseTimes[i] - releaseTimes[i - 1] ,第 0 次按键的持续时间为 releaseTimes[0] 。

注意,测试期间,同一个键可以在不同时刻被多次按下,而每次的持续时间都可能不同。

请返回单次按键 持续时间最长 的键,如果有多个这样的键,则返回 按字母顺序排列最大 的那个键。

示例 1:

输入:releaseTimes = [9,29,49,50], keysPressed = "cbcd"
输出:"c"
解释:按键顺序和持续时间如下:
按下 'c' ,持续时间 9(时间 0 按下,时间 9 松开)
按下 'b' ,持续时间 29 - 9 = 20(松开上一个键的时间 9 按下,时间 29 松开)
按下 'c' ,持续时间 49 - 29 = 20(松开上一个键的时间 29 按下,时间 49 松开)
按下 'd' ,持续时间 50 - 49 = 1(松开上一个键的时间 49 按下,时间 50 松开)
按键持续时间最长的键是 'b' 和 'c'(第二次按下时),持续时间都是 20
'c' 按字母顺序排列比 'b' 大,所以答案是 'c'

示例 2:

输入:releaseTimes = [12,23,36,46,62], keysPressed = "spuda"
输出:"a"
解释:按键顺序和持续时间如下:
按下 's' ,持续时间 12
按下 'p' ,持续时间 23 - 12 = 11
按下 'u' ,持续时间 36 - 23 = 13
按下 'd' ,持续时间 46 - 36 = 10
按下 'a' ,持续时间 62 - 46 = 16
按键持续时间最长的键是 'a' ,持续时间 16

提示:

  • releaseTimes.length == n
  • keysPressed.length == n
  • 2 <= n <= 1000
  • 1 <= releaseTimes[i] <= 109
  • releaseTimes[i] < releaseTimes[i+1]
  • keysPressed 仅由小写英文字母组成

题解:

class Solution:
    def slowestKey(self, releaseTimes: List[int], keysPressed: str) -> str:
        cover_time = []
        releaseTimes.insert(0,0)  # 插入初始时间
        # 找到每个按键的准确持续时间
        for i in range(len(releaseTimes)-1):
            cover_time.append(releaseTimes[i+1]-releaseTimes[i])
        ## 把键值对打包为[(key,values)]
        list_key = list(keysPressed)
        set_res = list(zip(list_key,cover_time))
        res = {}
        # 遍历 set_res,保留最大值  
        for key, value in set_res:  
            # 如果 key 不存在,直接赋值  
            if key not in res:  
                res[key] = value  
            # 如果 key 已经存在,保留较大的值  
            elif value > res[key]:  
                res[key] = value 
        # 找到累加和最大的键(字典序) 
        res_max_values = max(res.values())
        final_res = []
        for k,v in res.items():
            if v == res_max_values:
                final_res.append(k)
        return max(final_res)  # 返回字典序最大的键

相关文章:

  • Java 线程与线程池类/接口继承谱系图+核心方法详解
  • SpringBoot集成Swagger指南
  • 33.HarmonyOS NEXT NumberBox 步进器高级技巧与性能优化
  • 【时时三省】(C语言基础)赋值表达式和赋值语句和变量赋初值
  • TypeScript类:面向对象编程的基石
  • 关于 ESP32 未公开 Bluetooth® HCI 命令的事实澄清
  • [多线程]基于环形队列(RingQueue)的生产者-消费者模型的实现
  • c++20 Concepts的简写形式与requires 从句形式
  • 二叉树_3_模拟实现二叉树
  • PySide(PyQT),QGraphicsItem的pos()和scenePos()区别
  • 【数据分析大屏】基于Django+Vue汽车销售数据分析可视化大屏(完整系统源码+数据库+开发笔记+详细部署教程+虚拟机分布式启动教程)✅
  • Kotlin D3
  • 推理模型对SQL理解能力的评测:DeepSeek r1、GPT-4o、Kimi k1.5和Claude 3.7 Sonnet
  • H3C交换机的VRRP配置
  • Ansible运行原理揭秘:如何用YAML脚本掌控数服务器?
  • 第二篇:CTF常见题型解析:密码学、逆向工程、漏洞利用、Web安全
  • vue3 element-plus form校验不生效
  • python-leetcode-递增的三元子序列
  • 详细介绍 Jupyter nbconvert 工具及其用法:如何将 Notebook 转换为 Python 脚本
  • 数据库系统概论(三)数据库系统的三级模式结构
  • 京东CEO许冉:外卖日单量接近2000万单,看到外卖对平台拉动和转化效应
  • 广州地铁十一号线赤沙车辆段工程高坠事故调查报告公布:1人重伤且漏报
  • 长沙查处疑似非法代孕:有人企图跳窗,有女子被麻醉躺手术台
  • 世贸组织欢迎中美经贸高层会谈取得积极成果
  • 习近平圆满结束对俄罗斯国事访问并出席纪念苏联伟大卫国战争胜利80周年庆典
  • 时代中国控股:前4个月销售额18.1亿元,境外债重组协议押后聆讯至5月底