## 299. Bulls and Cows

You are playing the **Bulls and Cows** 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 `secret`

and your friend's guess `guess`

, return *the hint for your friend's guess*.

The hint should be formatted as `"xAyB"`

, where `x`

is the number of bulls and `y`

is the number of cows. Note that both `secret`

and `guess`

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.

**Example 3:**

Input:secret = "1", guess = "0"Output:"0A0B"

**Example 4:**

Input:secret = "1", guess = "1"Output:"1A0B"

**Constraints:**

`1 <= secret.length, guess.length <= 1000`

`secret.length == guess.length`

`secret`

and`guess`

consist of digits only.

## Rust Solution

```
struct Solution;
impl Solution {
fn get_hint(secret: String, guess: String) -> String {
let s: Vec<char> = secret.chars().collect();
let g: Vec<char> = guess.chars().collect();
let mut bulls = 0;
let mut cows = 0;
let mut s_count = vec![0; 10];
let mut g_count = vec![0; 10];
let n = s.len();
let m = g.len();
for i in 0..n.max(m) {
if i < n.min(m) && s[i] == g[i] {
bulls += 1;
} else {
if i < n {
s_count[(s[i] as u8 - b'0') as usize] += 1;
}
if i < m {
g_count[(g[i] as u8 - b'0') as usize] += 1;
}
}
}
for i in 0..10 {
cows += s_count[i].min(g_count[i]);
}
format!("{}A{}B", bulls, cows)
}
}
#[test]
fn test() {
let secret = "1807".to_string();
let guess = "7810".to_string();
let res = "1A3B".to_string();
assert_eq!(Solution::get_hint(secret, guess), res);
let secret = "1123".to_string();
let guess = "0111".to_string();
let res = "1A1B".to_string();
assert_eq!(Solution::get_hint(secret, guess), res);
}
```

Having problems with this solution? Click here to submit an issue on github.