zoukankan      html  css  js  c++  java
  • LeetCode-500-键盘行

    键盘行

    题目描述:给你一个字符串数组 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);
            }
        }
    }
    

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

  • 相关阅读:
    Jmeter中的几个重要测试指标释义
    接口测试考虑
    树Hash学习笔记
    kali linux主题美化
    Kali Linux 终端字体配色
    解决github无法打开
    Python requests数据的content和text的区别
    Python+adb操作移动端自动化测试
    linux后台运行python程序
    洛谷P2791 幼儿园篮球题 另解
  • 原文地址:https://www.cnblogs.com/kaesar/p/15375043.html
Copyright © 2011-2022 走看看