美文网首页
500. Keyboard Row

500. Keyboard Row

作者: matrxyz | 来源:发表于2018-01-14 08:22 被阅读0次

    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.

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

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

    Solution:Hashmap

    思路:
    Time Complexity: O(N) Space Complexity: O(N)

    Solution Code:

    public class Solution {
        public String[] findWords(String[] words) {
            String[] strs = {"QWERTYUIOP","ASDFGHJKL","ZXCVBNM"};
            Map<Character, Integer> map = new HashMap<>();
            for(int i = 0; i<strs.length; i++){
                for(char c: strs[i].toCharArray()){
                    map.put(c, i);//put <char, rowIndex> pair into the map
                }
            }
            List<String> res = new LinkedList<>();
            for(String w: words){
                // if(w.equals("")) continue;
                int index = map.get(w.toUpperCase().charAt(0));
                for(char c: w.toUpperCase().toCharArray()){
                    if(map.get(c)!=index){
                        index = -1; //don't need a boolean flag. 
                        break;
                    }
                }
                if(index!=-1) res.add(w);//if index != -1, this is a valid string
            }
            return res.toArray(new String[0]);
        }
    }
    

    相关文章

      网友评论

          本文标题:500. Keyboard Row

          本文链接:https://www.haomeiwen.com/subject/lutkoxtx.html