题目:

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

美式键盘 中:

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

示例 1:

输入:words = ["Hello","Alaska","Dad","Peace"]
输出:["Alaska","Dad"]
示例 2:

输入:words = ["omk"]
输出:[]
示例 3:

输入:words = ["adsdf","sfd"]
输出:["adsdf","sfd"]

提示:

1 <= words.length <= 20
1 <= words[i].length <= 100
words[i] 由英文字母(小写和大写字母)组成

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/keyboard-row
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

哈希表:使用哈希表记录每个字母所在键盘行的编号,一个字母由键盘同一行的字母组成,等价于该单词的任意两个字母所在键盘行的编号相同。因此把判断一个单词是否由键盘同一行的字母组成的问题变成首先得到该单词的首字母所在键盘行的编号,然后判断该单词的其余字母所在键盘行的编号是否与首字母所在的键盘行编号相同。

注意:

1.单词中可能既包含大写字母也包含小写字母,因此在记录和判断每个字母所在键盘行的编号时,需要都转换成小写字母,再进行相应的操作。

2.单词都是由英文字母组成,因此可以使用长度为26的数组代替哈希表。

java代码:

 1 class Solution {
2 public String[] findWords(String[] words){
3 String[] lettersRow = {"qwertyuiop", "asdfghjkl", "zxcvbnm"};
4 int n = lettersRow.length;
5 int[] hash = new int[26];
6 //获取键盘的每行并给编号
7 for (int i = 0; i < n; i++){
8 //获取每个单词
9 String letters = lettersRow[i];
10 int letterscount = letters.length();
11 //给键盘的每行的每个字母进行编号
12 for(int j = 0; j < letterscount; j++){
13 hash[letters.charAt(j) - 'a'] = i;
14 }
15 }
16 List<String> ans = new ArrayList<String>();
17 for(String word : words){
18 boolean flag = true;
19 int wordLength = word.length();
20 //获取首字母的编号
21 int first = hash[Character.toLowerCase(word.charAt(0)) - 'a'];
22 //判断其他字母是否与首字母编号一致
23 for(int i = 1; i < wordLength; i++){
24 int currow = hash[Character.toLowerCase(word.charAt(i)) - 'a'];
25 //如果当前字母编号与首字母编号不相同
26 if(currow != first){
27 flag = false;
28 break;
29 }
30 }
31 if(flag){
32 ans.add(word);
33 }
34 }
35 //转化成字符串数组
36 int length = ans.size();
37 String[] rowWords = new String[length];
38 for(int i = 0; i < length; i++){
39 rowWords[i] = ans.get(i);
40 }
41 return rowWords;
42 }
43 }

 python3代码:

利用python中集合的差集,将输入的每个单词与键盘的每行做差集,如果这个差集为空,则说明这个单词是在键盘的同一行,则将当前单词添加到结果列表中。

1 class Solution:
2 def findWords(self, words: List[str]) -> List[str]:
3 ans, lines = [], ["qwertyuiop", "asdfghjkl", "zxcvbnm"]
4 for word in words:
5 for line in lines:
6 if not (set(word.lower()) - set(line)):
7 ans.append(word)
8
9 return ans

 小知识:

python中set():set() 函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。

力扣500(java&python)-键盘行(简单)的更多相关文章

  1. 力扣(LeetCode)键盘行 个人题解

    给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词.键盘如下图所示. 示例: 输入: ["Hello", "Alaska", "Dad& ...

  2. 力扣566. 重塑矩阵-C语言实现-简单题

    题目 传送门 在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据. 给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要 ...

  3. LeetCode(力扣)——Search in Rotated Sorted Array2 搜索旋转排序数组 python实现

    题目描述: python实现 Search in Rotated Sorted Array2 搜索旋转排序数组   中文: 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0 ...

  4. LeetCode(力扣)——Search in Rotated Sorted Array 搜索旋转排序数组 python实现

    题目描述: python实现 Search in Rotated Sorted Array 搜索旋转排序数组   中文:假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1 ...

  5. 力扣485. 最大连续1的个数-C语言实现-简单题

    题目 [题目传送门] 给定一个二进制数组, 计算其中最大连续1的个数. 示例 1: 输入: [1,1,0,1,1,1] 输出: 3 解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3 ...

  6. 力扣832. 翻转图像-C语言实现-简单题

    题目 传送门 文本 给定一个二进制矩阵 A,我们想先水平翻转图像,然后反转图像并返回结果. 水平翻转图片就是将图片的每一行都进行翻转,即逆序.例如,水平翻转 [1, 1, 0] 的结果是 [0, 1, ...

  7. 力扣算法经典第一题——两数之和(Java两种方式实现)

    一.题目 难度:简单 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数, 并返回它们的数组下标. 你可以假设每种输入只会对应一 ...

  8. 力扣—Reorder List(重排链表)python实现

    题目描述: 中文: 给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→… 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点 ...

  9. 力扣 ——Linked List Cycle II(环形链表 II) python实现

    题目描述: 中文: 给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始). ...

  10. 力扣——Linked List Cycle(环形链表) python实现

    题目描述: 中文: 给定一个链表,判断链表中是否有环. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始). 如果 pos 是 -1,则在该链表中没有环. ...

随机推荐

  1. 关于hashCode和equals重写

    规则 只要重写equals,就必须重写hashCode. 用Set存储对象或者用对象作为Map的键时,必须重写hashCode.也就是说,当需要用对象的哈希值来判断对象是否相等时必须重写hashCod ...

  2. 回声消除(Acoustic Echo Cancellation)中遇到的几个常见问题思考

    什么才是好的回声消除效果   个人的理解:好的回声消除算法,要满足两个条件:一个是回声确实被消除了,另外一个是麦克风采集到音频信号不能被消除,常见的就是人的声音信号.这个算法只是提供了一种方法,具体的 ...

  3. gcc编译stm32 f103出现错误init.c:(.text.__libc_init_array+0x20): undefined reference to `_init'

    解决方法: 方法一:去掉makefile中的编译选项:-nostartfiles 方法二:方法一不凑效的情况下,添加编译选型:--specs=nano.specs

  4. B站Aimls的JavaFx教程目录合集

    B站里有时候不太好去找资源,用JS爬了下,整出标题和链接,方便后续查询某个知识点的使用! JavaFX视频教程第1课,hello world JavaFX视频教程第2课,application的启动方 ...

  5. TornadoFx中的css美化

    原文地址:TornadoFx中的css美化 - Stars-One的杂货小窝 TornadoFx中使用类重新对css进行了封装,所以可以用代码的形式来书写样式 说明 除了Text,其他的若是要修改文字 ...

  6. Android Studio自带模拟器无法访问网络问题解决

    测试APP的时候,发现Android Studio自带的模拟器访问不了百度等网站,之前一直用的好好的,觉得可能是版本的问题,也有可能是公司网络的问题(因为在家里的电脑的Android Studio的模 ...

  7. JSF+EJB+JPA之整体思想

    序言: JSF+EJB+JPA 其实没有想象中的难,不过要做好应用以及在合适的地方建立应用,才是真正的难点. 好的技术在不合适的地方做了应用,那也只能是垃圾. 所以这个东西并不适合于太小规模的企业应用 ...

  8. Python机器学习笔记:CART算法实战

    完整代码及其数据,请移步小编的GitHub 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/MachineLearningNote 前言 在python机 ...

  9. Word文档最后一页空白页中换行符无法删除

    Word文档最后一页空白页中换行符无法删除 问题如题: 尝试了delete.backspace.backspace+delete都不行. 找到了这个方法: 选中最后一页的换行符,然后段落--间距--行 ...

  10. 基于proteus的数字电路设计

    基于proteus的数字电路设计 1.实验原理 proteus的数字电路仿真能力还是比较强大的.这里总结一下proteus的几个基本操作以备后用.大致包括74hc系列的使用.常用调试设备.仿真开关.器 ...