我的第二题:
299. Bulls and Cows
<span style="font-size:18px;">import java.util.*;
public class Solution {
String secret,guess;
public String getHint(String secret, String guess) {
String str;
int bullCounts = 0;
int cowCounts = 0;
ArrayList<Character> sec = new ArrayList<>();
for(int i=0; i<secret.length(); i++){
sec.add(secret.charAt(i));
}
ArrayList<Character> gue = new ArrayList<>();
for(int j=0; j<guess.length(); j++){
gue.add(guess.charAt(j));
}
Hashtable<String, Object> match = new Hashtable<>();
match.put(secret, sec);
match.put(guess, gue);
//这里想用hashtable,因为它给了提示,但是后面就用链表去了
for(int k = 0; k<sec.size(); k++){
if(sec.get(k)==gue.get(k)){
bullCounts++;
sec.remove(k);
gue.remove(k);
k--;//注意,这里使用了remove()方法,链表的size减一了,所以循环变量k--
}
}
for(int i = 0; i<sec.size(); i++){
for(int j=0; j<gue.size(); j++){
if(sec.get(i)==gue.get(j)){
cowCounts++;
//sec.remove(i);
gue.remove(j);
j--;//同理
break;//只要有匹配的元素,就行了,不要继续遍历后面的,跳出循环
}
}
}
//for(Iterator<Integer> ite =sec.iterator(); ite.hasNext();){
//}
str = bullCounts + "A" + cowCounts + "B";//字符串的加法运算
return str;
}
}</span>
解这道题时,刚开始想到的是只用String类,就解决,字符匹配用charAt(),移除用replace(older,“”)代替,后来发现只有空字符串,没有空字符,且字符char不能强制转换为String类,就放弃了这个方法,改用链表结构,remove方便,但是runtime:38ms,也不是优解,继续优化。