力扣题解| 500. 键盘行

    技术2022-07-11  93

    500. 键盘行

    给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词。键盘如下图所示。

    示例:

    输入: ["Hello", "Alaska", "Dad", "Peace"] 输出: ["Alaska", "Dad"]  

    注意:

    你可以重复使用键盘上同一字符。 你可以假设输入的字符串将只包含字母。

    思路:首先编写键盘每一行作为一个Set集合,取给定的每一个字符串,利用Set集合的contains()方法逐个字符比较,如果全部遍历完毕都在该行键盘组成的字符串中,则可以输出,否则不输出。

    public String[] findWords(String[] words) { if (words.length == 0) { return new String[0]; } String[] res = null; Set<Character> oneSet = new HashSet<Character>(); Set<Character> twoSet = new HashSet<Character>(); Set<Character> threeSet = new HashSet<Character>(); char[] one = {'Q','W','E','R','T','Y','U','I','O','P'}; char[] two = {'A','S','D','F','G','H','J','K','L'}; char[] three = {'Z','X','C','V','B','N','M'}; for (char c : two) { twoSet.add(c); twoSet.add((c+"").toLowerCase().charAt(0)); } for (char c : one) { oneSet.add(c); oneSet.add((c+"").toLowerCase().charAt(0)); } for (char c : three) { threeSet.add(c); threeSet.add((c+"").toLowerCase().charAt(0)); } String string = ""; for (String str : words) { char[] chs = str.toCharArray(); boolean oneflag=true, twoflag=true,threeflag=true; for (char c : chs) { if (!oneSet.contains(c)) { oneflag = false; } if (!twoSet.contains(c)) { twoflag = false; } if (!threeSet.contains(c)) { threeflag = false; } } if (threeflag || twoflag || oneflag) { string+=str; string+=","; } } if (string.length()>0) { string = string.substring(0, string.length()-1); res = string.split(","); return res; }else { return new String[0]; } }

     

    Processed: 0.010, SQL: 9