LeetCode Keyboard Row

原题链接在这里:https://leetcode.com/problems/keyboard-row/#/description

题目:

Given a List of words, return the words that can be typed using letters of alphabet on only one row's of American keyboard like the image below.

American keyboard

Example 1:

Input: ["Hello", "Alaska", "Dad", "Peace"]
Output: ["Alaska", "Dad"]

Note:

  1. You may use one character in the keyboard more than once.
  2. You may assume the input string will only contain letters of alphabet.

题解:

把在同row的char标记成同index存在HashMap<Character, Integer> hm中. 

然后判定word中的每一个char是否有相同的index.

Time Complexity: O(n), n是words中每个word的char总和.

Space: O(1). hm size, regardless res size.

AC Java:

 1 public class Solution {
 2     public String[] findWords(String[] words) {
 3         if(words == null || words.length == 0){
 4             return words;
 5         }
 6         
 7         String [] keyboard = {"qwertyuiop", "asdfghjkl", "zxcvbnm"};
 8         HashMap<Character, Integer> hm = new HashMap<Character, Integer>();
 9         for(int i = 0; i<keyboard.length; i++){
10             for(char c : keyboard[i].toCharArray()){
11                 hm.put(c, i);
12             }
13         }
14         
15         List<String> res = new ArrayList<String>();
16         for(String word : words){
17             if(word == null || word.length() == 0){
18                 continue;
19             }
20             int ind = hm.get(word.toLowerCase().charAt(0));
21             for(char c : word.toLowerCase().toCharArray()){
22                 if(ind != hm.get(c)){
23                     ind = -1;
24                 }
25             }
26             if(ind != -1){
27                 res.add(word);
28             }
29         }
30         
31         return res.toArray(new String[0]);
32     }
33 }
原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/6637828.html