小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
题目
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;
}
}