给你一个字符串数组 words ,只返回可以使用在 美式键盘 同一行的字母打印出来的单词。键盘如下图所示。
美式键盘 中:
第一行由字符 "qwertyuiop" 组成。
第二行由字符 "asdfghjkl" 组成。
第三行由字符 "zxcvbnm" 组成。
示例 1:
输入:words = ["Hello","Alaska","Dad","Peace"]
输出:["Alaska","Dad"]
示例 2:
输入:words = ["omk"]
输出:[]
示例 3:
输入:words = ["adsdf","sfd"]
输出:["adsdf","sfd"]
题解:没啥能够细说的,就是把每个单词都判断一下是不是再每一行,直接用三个set存三行的字母。
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
class Solution {
boolean isFirst(String word)
{
Set<Character> set=new HashSet<>();
set.add('q');
set.add('w');
set.add('e');
set.add('r');
set.add('t');
set.add('y');
set.add('u');
set.add('i');
set.add('o');
set.add('p');
for(int i=0;i<word.length();i++)
{
if(!set.contains(word.charAt(i)))
return false;
}
return true;
}
boolean isSecond(String word)
{
Set<Character> set=new HashSet<>();
set.add('a');
set.add('s');
set.add('d');
set.add('f');
set.add('g');
set.add('h');
set.add('j');
set.add('k');
set.add('l');
for(int i=0;i<word.length();i++)
{
if(!set.contains(word.charAt(i)))
return false;
}
return true;
}
boolean isThird(String word)
{
Set<Character> set=new HashSet<>();
set.add('z');
set.add('x');
set.add('c');
set.add('v');
set.add('b');
set.add('n');
set.add('m');
for(int i=0;i<word.length();i++)
{
if(!set.contains(word.charAt(i)))
return false;
}
return true;
}
public String[] findWords(String[] words) {
List<String> ans=new ArrayList<String>();
for(String word:words)
{
String low_word=word.toLowerCase();
if(isFirst(low_word))
ans.add(word);
if(isSecond(low_word))
ans.add(word);
if(isThird(low_word))
ans.add(word);
}
return ans.toArray(new String[ans.size()]);
}
}