LeetCode-500-键盘行
source link: https://segmentfault.com/a/1190000040775038
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
LeetCode-500-键盘行
解法一:遍历字符题目描述:给你一个字符串数组
words
,只返回可以使用在 美式键盘 同一行的字母打印出来的单词。示例说明请见LeetCode官网。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/probl...
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
首先,如果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); } } }
【每日寄语】 平平淡淡看世界,踏踏实实写人生。
Recommend
-
76
职场话题 - @bitch - 信用卡有债务,不太方便换工作,换房子。头疼 emmm
-
45
-
26
路由器 - @dongrenwen - # 求推荐 300 - 500 元 路由器1. 100 平的房子,最好不用 AP2. 本来想入手 K2P,但是现在炒的价格太高,觉得这个价格可以买到新品了3. 另外,这个价格应该还入手
-
14
重写 500 Lines or Less 项目 - Static Analysis 版权声明:所有博客文章除特殊声明外均为原创,允许转载,但要求注明出处。 本文章是
-
11
重写 500 Lines or Less 项目 - Continuous Integration 版权声明:所有博客文章除特殊声明外均为原创,允许转载,但要求注明出处。 本文章是
-
11
重写 500 Lines or Less 项目 - Template Engine 版权声明:所有博客文章除特殊声明外均为原创,允许转载,但要求注明出处。 本文章是
-
24
重写 500 Lines or Less 项目 - Web Server 2020-05-18 00:45
-
5
500 impersonations in 2 minutes - for real? 2007-04-14 by qntm There's a video doing th...
-
9
100%进收件箱,精准微信群营销日收入500+ 做项目,归根结底就是做流量。 我之前用泡妞举过例子,我们...
-
5
V2EX › 机械键盘 500 元无线键盘求推荐 h...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK