关于java:LeetCode500键盘行

28次阅读

共计 1773 个字符,预计需要花费 5 分钟才能阅读完成。

键盘行

题目形容:给你一个字符串数组 words,只返回能够应用在 美式键盘 同一行的字母打印进去的单词。

示例阐明请见 LeetCode 官网。

起源:力扣(LeetCode)
链接:https://leetcode-cn.com/probl…
著作权归领扣网络所有。商业转载请分割官网受权,非商业转载请注明出处。

解法一:遍历字符

首先,如果 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);
        }
    }
}

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

正文完
 0