問題摘要: 給定兩個字符串數組,返回一個整數,表示它們之間有多少匹配(忽略重複項)。CodingBat commonTwo方法,幫忙檢查一下輸出?
真正的答案:輸出 http://www.javaproblems.com/2013/11/java-ap-1-commontwo-codingbat-solution.html
我的代碼
public int commonTwo(String[] a, String[] b) {
int count = 0;
boolean done = false;
for (int i = 0; i<a.length-1; i++){
if(a[i].equals(a[i+1])){
i++;
for (String j:b)
if (a[i].equals(j) && !done){
done = true;
count++;
}
}
else{
for (String j:b)
if(a[i].equals(j) && !done){
done = true;
count++;
}
}
done = false;
if(i == a.length-2)
for (String j:b)
if (a[i+1].equals(j) && !done){
done = true;
count++;
}
}
return count;
}
圖片:[1]:http://i.stack.imgur.com/0esjC.png
那麼,它的目的是做的是通過所有的數組a,如果它等於下一個,則轉到該索引,然後在數組之間存在匹配時添加進行計數。完成的布爾值被用來使它成爲它,所以它不會添加以計算是否有與a相匹配的b的重複項,並且一旦找到匹配項就結束它。
最後,
if(i == a.length-2)
是爲了使它所以如果這是最後的索引號前一秒(作爲最後一個索引號不會在某些情況下進行檢查),以及不一樣的最後一個索引號,然後在檢查最後一個索引號之後檢查最後一個索引號的匹配。我明白爲什麼會出現這兩種錯誤,並且想知道可以採取什麼措施來解決這個問題,特別是針對第二個/關於代碼的評論。另外,我注意到的第三個問題是([「a」],[「a」])→1但代碼將導致0.
我的代碼解決方案的線性時間,這是利用了一個事實,即兩列按照字母順序排列的優勢。 –
歡迎任何疑問。 –