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:
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.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);
}