leetcode官方题(LeetCode-500-键盘行)

题目描述:给你一个字符串数组 words ,只返回可以使用在 美式键盘 同一行的字母打印出来的单词,今天小编就来聊一聊关于leetcode官方题?接下来我们就一起去研究一下吧!

leetcode官方题(LeetCode-500-键盘行)

leetcode官方题

键盘行

题目描述:给你一个字符串数组 words ,只返回可以使用在 美式键盘 同一行的字母打印出来的单词。

示例说明请见LeetCode官网。

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/keyboard-row/

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解法一:遍历字符

首先,如果wordsnull或者words为空数组,则直接返回空数组,就是没有符合条件的单词。

否则,首先初始化一个MapcharacterMap用于保存行数和对应行所有的字符,然后遍历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); } } }

【每日寄语】 平平淡淡看世界,踏踏实实写人生。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页