Skip to content

299. Bulls and Cows

  • Time: $O(n)$
  • Space: $O(10)$
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {
 public:
  string getHint(string secret, string guess) {
    int A = 0;
    int B = 0;
    vector<int> count1(10);
    vector<int> count2(10);

    for (int i = 0; i < secret.length(); ++i)
      if (secret[i] == guess[i])
        ++A;
      else {
        ++count1[secret[i] - '0'];
        ++count2[guess[i] - '0'];
      }

    for (int i = 0; i < 10; ++i)
      B += min(count1[i], count2[i]);

    return to_string(A) + "A" + to_string(B) + "B";
  }
};
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
  public String getHint(String secret, String guess) {
    int A = 0;
    int B = 0;
    int[] count1 = new int[10];
    int[] count2 = new int[10];

    for (int i = 0; i < secret.length(); ++i)
      if (secret.charAt(i) == guess.charAt(i))
        ++A;
      else {
        ++count1[secret.charAt(i) - '0'];
        ++count2[guess.charAt(i) - '0'];
      }

    for (int i = 0; i < 10; ++i)
      B += Math.min(count1[i], count2[i]);

    return String.valueOf(A) + "A" + String.valueOf(B) + "B";
  }
}
1
2
3
4
5
class Solution:
  def getHint(self, secret: str, guess: str) -> str:
    bulls = sum(map(operator.eq, secret, guess))
    bovine = sum(min(secret.count(x), guess.count(x)) for x in set(guess))
    return '%dA%dB' % (bulls, bovine - bulls)