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.

299. Bulls and Cows
``````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);
}
``````