# LC 299. Bulls and Cows
### [Problem link](https://leetcode.com/problems/bulls-and-cows/)
###### tags: `leedcode` `medium` `c++`
You are playing the **<a href="https://en.wikipedia.org/wiki/Bulls_and_Cows" target="_blank">Bulls and Cows</a>** game with your friend.
You write down a secret number and ask your friend to guess what the number is. When your friend makes a guess, you provide a hint with the following info:
- The number of "bulls", which are digits in the guess that are in the correct position.
- The number of "cows", which are digits in the guess that are in your secret number but are located in the wrong position. Specifically, the non-bull digits in the guess that could be rearranged such that they become bulls.
Given the secret number <code>secret</code> and your friend's guess <code>guess</code>, return the hint for your friend's guess.
The hint should be formatted as <code>"xAyB"</code>, where <code>x</code> is the number of bulls and <code>y</code> is the number of cows. Note that both <code>secret</code> and <code>guess</code> may contain duplicate digits.
**Example 1:**
```
Input: secret = "1807", guess = "7810"
Output: "1A3B"
Explanation: Bulls are connected with a '|' and cows are underlined:
"1807"
|
"7810"
```
**Example 2:**
```
Input: secret = "1123", guess = "0111"
Output: "1A1B"
Explanation: Bulls are connected with a '|' and cows are underlined:
"1123" "1123"
| or |
"0111" "0111"
Note that only one of the two unmatched 1s is counted as a cow since the non-bull digits can only be rearranged to allow one 1 to be a bull.
```
**Constraints:**
- <code>1 <= secret.length, guess.length <= 1000</code>
- <code>secret.length == guess.length</code>
- <code>secret</code> and <code>guess</code> consist of digits only.
## Solution 1
#### C++
```cpp=
class Solution {
public:
string getHint(string secret, string guess) {
int n = secret.size();
int a = 0;
int b = 0;
int cnt0[10];
int cnt1[10];
for (int i = 0; i < n; i++) {
if (secret[i] == guess[i]) {
a++;
} else {
cnt0[secret[i] - '0']++;
cnt1[guess[i] - '0']++;
}
}
for (int i = 0; i < 10; i++) {
b += min(cnt0[i], cnt1[i]);
}
return to_string(a) + "A" + to_string(b) + "B";
}
};
```
>### Complexity
>n = secret.length
>| | Time Complexity | Space Complexity |
>| ----------- | --------------- | ---------------- |
>| Solution 1 | O(n) | O(1) |
## Note
x