LeetCode-500-键盘行
键盘行
题目描述:给你一个字符串数组
words
,只返回可以使用在 美式键盘 同一行的字母打印出来的单词。示例说明请见LeetCode官网。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/keyboard-row/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法一:遍历字符
首先,如果words为null或者words为空数组,则直接返回空数组,就是没有符合条件的单词。
否则,首先初始化一个Map为characterMap用于保存行数和对应行所有的字符,然后遍历words中的单词word:
- 首先获取word中的第一个字符为firstCharacter,根据characterMap判断第一个字符firstCharacter在哪一行并记录rowNum;
- 然后,判断word后面的字符是否都在第rowNum行,如果不是,则跳过处理下一个单词;如果是,则把单词添加到结果集里面。
最后返回结果集中的单词。
import java.util.*;
/**
* @Author: ck
* @Date: 2021/10/3 10:47 上午
*/
public class LeetCode_500 {
private static final Map<Integer, Set<Character>> characterMap = new HashMap<>();
static {
characterMap.put(1, new HashSet<>(Arrays.asList(new Character[]{'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p'})));
characterMap.put(2, new HashSet<>(Arrays.asList(new Character[]{'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l'})));
characterMap.put(3, new HashSet<>(Arrays.asList(new Character[]{'z', 'x', 'c', 'v', 'b', 'n', 'm'})));
}
public static String[] findWords(String[] words) {
if (words == null || words.length == 0) {
return new String[0];
}
String[] result = new String[words.length];
int index = 0, size = 0;
for (String word : words) {
if (word == null || word.length() == 0) {
result[index++] = word;
size++;
continue;
}
char[] wordArr = word.toCharArray();
char firstCharacter = wordArr[0];
int rowNum = 1;
for (Map.Entry<Integer, Set<Character>> characterEntry : characterMap.entrySet()) {
if (characterEntry.getValue().contains(Character.toLowerCase(firstCharacter))) {
rowNum = characterEntry.getKey();
break;
}
}
int i;
for (i = 1; i < word.length(); i++) {
if (!characterMap.get(rowNum).contains(Character.toLowerCase(wordArr[i]))) {
break;
}
}
if (i == word.length()) {
result[index++] = word;
size++;
}
}
return Arrays.copyOf(result, size);
}
public static void main(String[] args) {
String[] words = new String[]{"Hello", "Alaska", "Dad", "Peace"};
for (String word : findWords(words)) {
System.out.println(word);
}
}
}
【每日寄语】 平平淡淡看世界,踏踏实实写人生。
分类:
LeetCode-个人题解
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了