這個(gè)題目的意思是鍵盤的字母總共有三行窑多,參數(shù)是一組字符數(shù)組,如果數(shù)組里有全在一行的字符串,將這些字符串組成字符數(shù)組并返回秒裕。
剛開始我想把這些字母做成字符數(shù)組,然后轉(zhuǎn)化成list钞啸,用list的contains方法來字符串?dāng)?shù)組中的每個(gè)字符串的每個(gè)字符几蜻,并每行字母用一個(gè)數(shù)字來計(jì)數(shù),如果這個(gè)數(shù)字等于字符串的length()則將這個(gè)字符串添加add進(jìn)ArrayList中体斩,返回的時(shí)候?qū)rrayList轉(zhuǎn)化成String數(shù)組梭稚,這樣就不會(huì)有String數(shù)組初始化時(shí)大小的限制,寫完以后運(yùn)行發(fā)現(xiàn)根本出不來結(jié)果絮吵,debug發(fā)現(xiàn)根本進(jìn)不去那個(gè)字符包含的判斷弧烤,想了半天沒有想出哪里出了問題,剛好查api的時(shí)候查到String里面也有一個(gè)contain方法蹬敲,不過需要的參數(shù)是一個(gè)CharSequence暇昂,所以在判斷那里要在字符前面加上“”空字符串來轉(zhuǎn)換,因?yàn)镾tring實(shí)現(xiàn)了CharSequence接口伴嗡,運(yùn)行以后完美運(yùn)行急波,然后做了一些優(yōu)化,如果三行中的計(jì)數(shù)數(shù)字任意兩個(gè)大于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()]);
}