20211031 每日一题(leetcode500) 002

223 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

题目

500. 键盘行
给你一个字符串数组 words ,只返回可以使用在 美式键盘 同一行的字母打印出来的单词。键盘如下图所示。

美式键盘 中: 第一行由字符 "qwertyuiop" 组成。 第二行由字符 "asdfghjkl" 组成。 第三行由字符 "zxcvbnm" 组成。

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

输入:words = ["omk"]
输出:[]

输入:words = ["adsdf","sfd"]
输出:["adsdf","sfd"]

提示:

1 <= words.length <= 20
1 <= words[i].length <= 100
words[i] 由英文字母(小写和大写字母)组成

问题分析解决

简单模拟方法

这道题很简单,首先想到的方法就是简单的模拟,遍历所有字符,看是否所有单词在键盘某一行中,另外要注意大小写。

class Solution {
    public String[] findWords(String[] words) {
        String[] models = new String[]{"qwertyuiop", "asdfghjkl", "zxcvbnm"};
        int cnt = 0;
        List<String> result = new ArrayList<>();
        for (String str : words) {
            for(String model:models){
                if(isInModel(str,model)){
                    result.add(str);
                }
            }
        }
        return result.toArray(new String[0]);
    }

    private boolean isInModel(String str, String model) {
        str = str.toLowerCase();
        for (int i = 0; i < str.length(); i++) {
            if (model.indexOf(str.charAt(i)) == -1) {
                return false;
            }
        }
        return true;
    }
}