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

leetcode 500 键盘行 WP

一、题目概述

给你一个字符串数组 words ,只返回可以使用在 美式键盘 同一行的字母打印出来的单词。键盘如下图所示。

请注意,字符串 不区分大小写,相同字母的大小写形式都被视为在同一行。

美式键盘 中:

  • 第一行由字符 "qwertyuiop" 组成。
  • 第二行由字符 "asdfghjkl" 组成。
  • 第三行由字符 "zxcvbnm" 组成。

二、思路

核心思路拆解

  1. 预处理键盘行:将三行键盘字符分别转为「集合」。集合的特性是「元素不可重复」且「成员判断效率极高(O (1))」,适合做归属校验;
  2. 统一字符大小写:由于题目不区分大小写,先将每个单词转为全小写,避免因 A 和 a 的 ASCII 差异导致误判;
  3. 单词转集合去重:将单词转为字符集合(例如 Alaska 转小写后为 alaska,集合为 {'a','l','s','k'}),重复字符不影响「是否在同一行」的判断,去重后能减少后续比对量;
  4. 子集判断筛选:核心步骤 —— 判断单词的字符集合是否是某一行键盘集合的「子集」。若满足,则该单词符合要求,加入结果列表。

三、代码

class Solution(object):def findWords(self, words):""":type words: List[str]:rtype: List[str]"""map1 = set('qwertyuiop')map2 = set('asdfghjkl')map3 = set('zxcvbnm')ans = []for word in words:lower_word = word.lower()set_word = set(lower_word)if set_word <= map1 or set_word <= map2 or set_word <= map3:ans.append(word)return ans

四、总结

集合关系判断运算符

这类运算符用于判断两个集合之间的逻辑关系,返回布尔值(True/False),是本次解题的核心用到的运算符类型。

运算符 含义(集合A 运算符 集合B) 等价方法 示例(基于本次题目) 适用场景
<= 判断 A 是否是 B 的子集(A 所有元素都在 B 中,允许 A=B) A.issubset(B) word_chars <= row1(判断单词字符是否全在键盘第一行) 筛选「元素全属于某一集合」的场景(如本次题目、合法字符校验)
< 判断 A 是否是 B 的真子集(A 是 B 的子集,且 A≠B) 无直接等价方法(可通过 A <= B and A != B 实现) {'q','w'} < row1(True);row1 < row1(False) 需严格区分「子集」和「相等」的场景,如集合层级判断
>= 判断 A 是否是 B 的超集(B 所有元素都在 A 中,允许 A=B) A.issuperset(B) row1 >= {'q','w','e'}(True) 判断一个集合是否包含另一个集合的所有元素(如权限覆盖判断)
> 判断 A 是否是 B 的真超集(A 是 B 的超集,且 A≠B) 无直接等价方法(可通过 A >= B and A != B 实现) row1 > {'q','w'}(True);row1 > row1(False) 需严格区分「超集」和「相等」的场景,如集合包含关系校验
== 判断两个集合是否相等(元素完全一致,与顺序、重复无关) A.__eq__(B) set('qwerty') == set('yqwert')(True) 校验两个集合的元素组成是否完全相同(如去重后内容比对)
!= 判断两个集合是否不相等(元素存在差异) A.__ne__(B) row1 != row2(True) 校验两个集合的元素组成是否不同

集合数学运算运算符

这类运算符用于对两个集合进行数学运算,返回一个新的集合,适用于集合间的元素整合与筛选。

运算符 含义(集合A 运算符 集合B) 等价方法 示例 适用场景
` ` 并集:返回包含 A 和 B 所有元素的新集合(自动去重) A.union(B) `row1
& 交集:返回同时在 A 和 B 中的元素组成的新集合 A.intersection(B) set('Hello') & row1(得到 {'e','l','o'} 筛选两个集合的公共元素(如查找单词与键盘行的重叠字符)
- 差集:返回在 A 中但不在 B 中的元素组成的新集合 A.difference(B) set('Hello') - row1(得到 {'h'} 筛选「属于A但不属于B」的元素(如查找单词中跨键盘行的字符)
^ 对称差集:返回在 A 或 B 中,但不同时在 A 和 B 中的元素 A.symmetric_difference(B) set('Hello') ^ row1(得到 {'h'},等价于差集;row1 ^ row2 等价于 `(row1 row2) - (row1&row2)`)

集合赋值运算符

这类运算符是「数学运算 + 赋值」的组合,用于直接更新原集合(而非返回新集合),适合原地修改集合的场景。

运算符 含义(集合A 运算符 集合B) 等价写法 说明
` =` 并集赋值:A = A ∪ B A.update(B)
&= 交集赋值:A = A ∩ B A.intersection_update(B) 保留 A 中与 B 重叠的元素,原地更新 A
-= 差集赋值:A = A - B A.difference_update(B) 删除 A 中属于 B 的元素,原地更新 A
^= 对称差集赋值:A = A ^ B A.symmetric_difference_update(B) 保留 A 和 B 的独有元素,原地更新 A

成员判断运算符

这是集合(及其他可迭代对象)的通用运算符,用于判断单个元素是否在集合中,返回布尔值。

运算符 含义 示例 适用场景
in 判断元素是否在集合中(O(1) 时间复杂度,远快于列表) 'q' in row1(True);'a' not in row1(True) 快速校验单个元素的归属(如判断某个字符是否在键盘某一行)
not in 判断元素是否不在集合中 'h' not in row1(True) 快速校验单个元素是否不属于某一集合
http://www.zskr.cn/news/143294.html

相关文章:

  • Windows系统文件msjter40.dll缺少损坏 下载修复
  • Kafka入门必知概念——Topic、分区、Offset、消费组的协作机制与影响
  • 软件缺少msjint40.dll文件 下载修复方法
  • STM32单片机温控风扇温度采集PWM调速设计
  • 延边州腺样体肥大、失眠、儿童抽动症中医调理指南 - 品牌日记
  • 流量洪峰冲不垮的秘密:揭秘系统过载保护的核心防线
  • GraphRAG革命:本体驱动的零噪声知识抽取框架,开发者的收藏必备!
  • C++学习笔记 35 虚析构函数
  • 深度解析Salesforce、Google、微软三大巨头的AI Agent战略布局与实战应用!
  • 挑战自我:如何在3个月内快速掌握工业级开发能力?AI架构师为0基础小白量身打造的超详细学习路线图!
  • PLSQL:候选字段选择
  • 2025 GEO自建vs外包决策分析:投入产出完整测算
  • 程序员必看:大模型(LLM)核心原理与实战应用详解(建议收藏)
  • 2026 高品质短剧音乐素材网站推荐:商用授权齐全,一键下载即用
  • Java:“object is not declare class”
  • Windows系统文件MSPRPCHS.DLL丢失找不到 下载修复方法
  • 热门短剧 BGM 网站合集:音质高清,适配短剧片头 / 转场 / 结局情节
  • 2025年十大IT领导层访谈盘点
  • 软件无法启动 找不到msjtes40.dll文件 下载修复方法
  • 东方博宜OJ 1335:土地分割 ← 递归求“最大公约数”
  • 高效查找短剧背景音乐网站:正规授权+高清无损,新手快速上手
  • Windows系统文件mskeyprotect.dll损坏 下载修复方法
  • 在 Android 上备份短信:保护您的对话
  • 苹果在Cloudflare 2025年全球互联网服务排名中位列第三
  • 4 STM32学习板入门视频教程 STM32芯片功能介绍
  • Vue customRef
  • OpenWRT 24.10下使用radvd发送IPv6 RIO路由
  • 64 位 Windows 对 32 位程序的兼容处理
  • AI 原生应用开发框架深度解析:从单智能体到多智能体协同开发 - 2
  • 全面掌握AI大模型:从零基础入门到实战应用的七阶段学习路线图全攻略!