栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Leetcode--Java--500. 键盘行

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Leetcode--Java--500. 键盘行

题目描述

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

样例描述
示例 1:

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

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

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

思路

简单模拟 + 哈希表 + 标记法

  1. 设置行号0, 1,2,将每行的字符与所在行号做映射关系。
  2. 对单词中的每个字符,查看行号是否都是同一个数字。
  3. 考虑到有重复的,可以在判断是否同一个时用set去重。
代码
class Solution {
    public String[] findWords(String[] words) {
       String[] rows = new String[]{
           "qwertyuiop",
           "asdfghjkl",
           "zxcvbnm"
       };
       Map map = new HashMap<>();
       //每个字符与所在行号做映射关系
       for (int i = 0; i < 3; i ++ ) {
           for (char c: rows[i].toCharArray()) {
               map.put(c, i);
           }
       }
       List res = new ArrayList<>();
       for (String word: words) {
           //每行的判断都需要一个set去重
            Set set = new HashSet<>();
           for (char c: word.toLowerCase().toCharArray()) {
               set.add(map.get(c));
           }
           //set有去重,如果都是同一行,就只有一个数
           if (set.size() == 1) res.add(word);
       }
       
       return res.toArray(new String[res.size()]);
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/361445.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号