[Leetcode] 500. 键盘行 java hashmap

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

American keyboard

示例:

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

注意:

  1. 你可以重复使用键盘上同一字符。

     2.你可以假设输入的字符串将只包含字母

class Solution {
    public String[] findWords(String[] words) {
        HashMap<Character,Integer> map=new HashMap<Character,Integer>();
        String[] s={"qwertyuiop","asdfghjkl","zxcvbnm"};
        for(int i=0;i<s.length;i++){//把键盘的三行分别放到hashmap中
            for(char j:s[i].toCharArray()){
                map.put(j,i);
            }
        }
        int index=0;
        List<String> list=new ArrayList<>();//新建list用于返回结果
        for(String i:words){
            if(i=="") continue;//words中遇到空字符串,跳出本次循环
            index=map.get(i.toLowerCase().toCharArray()[0]);
            //取非空字符串的首字符,得到它的value。
            for(char j:i.toLowerCase().toCharArray()){
            //将当前字符串剩下的字符与第一个字符的value作比较
                if(map.get(j)!=index){//有不相等的字符
                    index=-1;
                    break;
                }
            }
            if(index!=-1) list.add(i);//字符串全部来自键盘同一行。
        }
        return list.toArray(new String[list.size()]);//list转为array,类型是string
    }
}

猜你喜欢

转载自blog.csdn.net/niceHou666/article/details/83175936