500. 键盘行
给你一个字符串数组 words ,只返回可以使用在 美式键盘 同一行的字母打印出来的单词。键盘如下图所示。
美式键盘 中:
第一行由字符 “qwertyuiop” 组成。
第二行由字符 “asdfghjkl” 组成。
第三行由字符 “zxcvbnm” 组成。
American keyboard
示例 1:
输入:words = ["Hello","Alaska","Dad","Peace"]
输出:["Alaska","Dad"]
示例 2:
输入:words = ["omk"]
输出:[]
示例 3:
输入:words = ["adsdf","sfd"]
输出:["adsdf","sfd"]
提示:
1 <= words.length <= 20
1 <= words[i].length <= 100
words[i] 由英文字母(小写和大写字母)组成
题解:
我们创建一个长度为3的字符串数组s
,分别存储"qwertyuiop" , "asdfghjkl", "zxcvbnm"
,接着对于words
,依次检查它用到的字母是否只在s[0]或s[1]或s[2]
中,如果符合则返回,不符合则不返回即可。
代码:
class Solution {
public String[] findWords(String[] words) {
String s1 = "qwertyuiopQWERTYUIOP";
String s2 = "asdfghjklASDFGHJKL";
String s3 = "zxcvbnmZXCVBNM";
String[] res = new String[words.length];
int index = 0;
for(int i=0;i<words.length;i++){
if(check(words[i],s1,s2,s3)){
res[index++] = words[i];
}
}
String[] resres = new String[index];
for(int i=0;i<index;i++){
resres[i] = res[i];
}
return resres;
}
public boolean check(String word,String s1,String s2,String s3){
int i;
for(i=0;i<word.length();i++){
int index1 = 0;
while(index1<s1.length()){
if(s1.charAt(index1)==word.charAt(i)){
break;
}
else{
index1++;
}
}
if(index1==s1.length()){
break;
}
}
if(i==word.length()){
return true;
}
int j;
for(j=0;j<word.length();j++){
int index2 = 0;
while(index2<s2.length()){
if(s2.charAt(index2)==word.charAt(j)){
break;
}
else{
index2++;
}
}
if(index2==s2.length()){
// return true;
break;
}
}
if(j==word.length()){
return true;
}
int k;
for(k=0;k<word.length();k++){
int index3 = 0;
while(index3<s3.length()){
if(s3.charAt(index3)==word.charAt(k)){
break;
}
else{
index3++;
}
}
if(index3==s3.length()){
break;
}
}
if(k==word.length()){
return true;
}
return false;
}
}