這個題目的意思是鍵盤的字母總共有三行,參數(shù)是一組字符數(shù)組,如果數(shù)組里有全在一行的字符串,將這些字符串組成字符數(shù)組并返回。
剛開始我想把這些字母做成字符數(shù)組,然后轉(zhuǎn)化成list,用list的contains方法來字符串數(shù)組中的每個字符串的每個字符,并每行字母用一個數(shù)字來計數(shù),如果這個數(shù)字等于字符串的length()則將這個字符串添加add進ArrayList中,返回的時候?qū)rrayList轉(zhuǎn)化成String數(shù)組,這樣就不會有String數(shù)組初始化時大小的限制,寫完以后運行發(fā)現(xiàn)根本出不來結(jié)果,debug發(fā)現(xiàn)根本進不去那個字符包含的判斷,想了半天沒有想出哪里出了問題,剛好查api的時候查到String里面也有一個contain方法,不過需要的參數(shù)是一個CharSequence,所以在判斷那里要在字符前面加上“”空字符串來轉(zhuǎn)換,因為String實現(xiàn)了CharSequence接口,運行以后完美運行,然后做了一些優(yōu)化,如果三行中的計數(shù)數(shù)字任意兩個大于0則退出,這樣就可以減少一些循環(huán)次數(shù),提交以后成功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()]);
}