Leetcode

Bulls and Cows

  • Time:O(n)
  • Space:O(10)

C++

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";
  }
};

JAVA

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";
  }
}

Python

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)