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;
}
相关推荐
ScilogyHunter几秒前
前馈/反馈控制是什么
算法·控制
_OP_CHEN12 分钟前
【算法基础篇】(四十八)突破 IO 与数值极限:快速读写 +__int128 实战指南
c++·算法·蓝桥杯·算法竞赛·快速读写·高精度算法·acm/icpc
黎雁·泠崖13 分钟前
Java分支循环与数组核心知识总结篇
java·c语言·开发语言
程序员泠零澪回家种桔子16 分钟前
RAG自查询:让AI精准检索的秘密武器
人工智能·后端·算法
糖葫芦君23 分钟前
TRPO-trust region policy optimization论文讲解
人工智能·算法·机器学习·强化学习
HaiLang_IT39 分钟前
基于RepVGG与注意力机制的手写潦草汉字识别算法研究
算法
一起努力啊~42 分钟前
算法刷题--字符串
算法
独断万古他化42 分钟前
【二分算法 深度解析】二段性思维与经典题型全通关
java·算法
@good_good_study1 小时前
STM32 C语言链表
c语言·stm32·链表
啊阿狸不会拉杆1 小时前
《数字图像处理》第 10 章 - 图像分割
图像处理·人工智能·深度学习·算法·计算机视觉·数字图像处理