这个题目的意思是键盘的字母总共有三行,参数是一组字符数组,如果数组里有全在一行的字符串,将这些字符串组成字符数组并返回。
刚开始我想把这些字母做成字符数组,然后转化成list,用list的contains方法来字符串数组中的每个字符串的每个字符,并每行字母用一个数字来计数,如果这个数字等于字符串的length()则将这个字符串添加add进ArrayList中,返回的时候将ArrayList转化成String数组,这样就不会有String数组初始化时大小的限制,写完以后运行发现根本出不来结果,debug发现根本进不去那个字符包含的判断,想了半天没有想出哪里出了问题,刚好查api的时候查到String里面也有一个contain方法,不过需要的参数是一个CharSequence,所以在判断那里要在字符前面加上“”空字符串来转换,因为String实现了CharSequence接口,运行以后完美运行,然后做了一些优化,如果三行中的计数数字任意两个大于0则退出,这样就可以减少一些循环次数,提交以后成功accepted。附上自己写的代码:
public String[] findWords(String[] words) {
int d=0,e=0,f=0;
List result = new ArrayList();
String key1 = "qwertyuiopQWERTYUIOP";
String key2 = "asdfghjklASDFGHJKL";
String key3 = "zxcvbnmZXCVBNM";
for(int i=0;i<words.length;i++){
for(int j=0;j<words[i].length();j++){
if(key1.contains(""+words[i].charAt(j)))d++;
if(key2.contains(""+words[i].charAt(j)))e++;
if(key3.contains(""+words[i].charAt(j)))f++;
if(d>0 && e>0)break;
if(d>0 && f>0)break;
if(e>0 && f>0)break;
if(d == words[i].length() || e==words[i].length() || f==words[i].length()){
result.add(words[i]);
}
}
d=0;
e=0;
f=0;
}
return (String[]) result.toArray(new String[result.size()]);
}