地址
难度
简单
题目
给你一个字符串数组 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] 由英文字母(小写和大写字母)组成
思路
- 模拟
根据题意,进行模拟。即先将键盘上的三行字母进行打表分类,依次检查 wordswordswords 中的单词中的每个字符是否都属于同一编号,若属于同一编号,则将其单词加入答案。
class Solution {
static String l1="qwertyuiopQWERTYUIOP";
static String l2="asdfghjklASDFGHJKL";
static String l3="zxcvbnmZXCVBNM";
static Map<Character,Integer> map;
static {
map=new HashMap<>();
for(char c:l1.toCharArray()){
map.put(c,1);
}
for(char c:l2.toCharArray()){
map.put(c,2);
}
for(char c:l3.toCharArray()){
map.put(c,3);
}
}
public String[] findWords(String[] words) {
List<String> list=new ArrayList<>();
w:for(String w:words){
int index=map.get(w.charAt(0));
for(char c:w.toCharArray()){
if(map.get(c) != index){
continue w;
}
}
list.add(w);
}
return list.toArray(new String[]{} );
}
}