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;
}
相关推荐
free-elcmacom2 小时前
发际线警告!手撕《C陷阱与缺陷》终极 BOSS:signal 函数与 typedef 魔法
c语言·开发语言·visual studio code·visual studio
青山是哪个青山3 小时前
LeetCode 123:买卖股票的最佳时机 III
算法
haluhalu.3 小时前
初识 Protobuf:微服务跨语言通信的一份契约
java·c语言·开发语言·c++·python
Zane19943 小时前
写对二分查找有多难?Java集合框架的作者也曾栽在一行mid计算上
算法
Lokey8683 小时前
transformer结构
算法
罗斯8393 小时前
EMBER恶意软件基准数据集
人工智能·算法·安全·网络安全
0+1113 小时前
算法 --二分查找
c++·算法·leetcode
圣保罗的大教堂3 小时前
leetcode 1674. 使数组互补的最少操作次数 中等
leetcode
临期冰淇淋4 小时前
Unisoc 展锐平台Camera摄像头分辨率适配
linux·c语言·驱动开发
Omics Pro4 小时前
新型条件传输模型!虚拟细胞扰动预测
数据库·人工智能·算法·机器学习·自然语言处理