LeetCode //C - 299. Bulls and Cows

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.

Constraints:
  • 1 <= secret.length, guess.length <= 1000
  • secret.length == guess.length
  • secret and guess consist of digits only.

From: LeetCode

Link: 299. Bulls and Cows


Solution:

Ideas:
  • Counting Bulls: The loop iterates over the characters of secret and guess strings and increments the bulls counter whenever the characters match.

  • Tracking Unmatched Digits: For digits that do not match, we increase the count of those digits in both the secret_count and guess_count arrays. The index in these arrays corresponds to the digit itself (i.e., the character '0' maps to index 0, '1' maps to index 1, and so on).

  • Counting Cows: After iterating through all characters, we compute the cows by taking the minimum count of each digit in both the secret_count and guess_count arrays. This ensures we count each digit correctly as a cow only as many times as it appears in both the secret and the guess.

  • Formatting Result: We use sprintf to format the output string as "xAyB" and return it.

Code:
c 复制代码
char* getHint(char* secret, char* guess) {
    int bulls = 0, cows = 0;
    int secret_count[10] = {0};
    int guess_count[10] = {0};
    int length = strlen(secret);

    // First pass: count bulls
    for (int i = 0; i < length; i++) {
        if (secret[i] == guess[i]) {
            bulls++;
        } else {
            // Count unmatched digits
            secret_count[secret[i] - '0']++;
            guess_count[guess[i] - '0']++;
        }
    }

    // Second pass: count cows
    for (int i = 0; i < 10; i++) {
        cows += (secret_count[i] < guess_count[i]) ? secret_count[i] : guess_count[i];
    }

    // Prepare the result in the format "xAyB"
    char* result = (char*)malloc(10 * sizeof(char)); // Allocate enough space for the result
    sprintf(result, "%dA%dB", bulls, cows);
    return result;
}
相关推荐
大熊背7 分钟前
ISP图像处理中大数乘法溢出处理(二)
算法·大数乘法
江洋之道13 分钟前
嵌入式LVGL UI架构实践:MVP分层 + 双链表路由,构建低耦合、易维护的嵌入式界面
c语言·架构·嵌入式·lvgl
roman_日积跬步-终至千里20 分钟前
【算法3】二叉树中的最大路径和
算法
小柯博客21 分钟前
01 · 点亮 STM32MP25 的硬件视频编解码:VPU 与那些“安静“的坑
c语言·笔记·stm32·单片机·嵌入式硬件·嵌入式·视频编解码
zbyyd28 分钟前
深入理解 Linux 文件 IO 与目录 IO:系统调用与库函数的本质区别
linux·c语言
XUEYUAN521236 分钟前
IP 池调度算法实战:代理池负载均衡、健康检查与失效剔除机制(2026)
tcp/ip·算法·负载均衡
无小道38 分钟前
算法——问题转化
算法
evans在进步43 分钟前
LeetCode 53 最大子数组和:一次遍历掌握 Kadane 算法
算法·leetcode·职场和发展
小七在进步1 小时前
数据结构:选择排序
数据结构·算法·排序算法
Nil2081 小时前
leetcode 230二叉搜索树中第k小的元素
算法·leetcode·职场和发展