-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path299.bulls-and-cows.cpp
71 lines (70 loc) · 2.06 KB
/
299.bulls-and-cows.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/*
* @lc app=leetcode id=299 lang=cpp
*
* [299] Bulls and Cows
*
* https://leetcode.com/problems/bulls-and-cows/description/
*
* algorithms
* Medium (37.73%)
* Total Accepted: 82.8K
* Total Submissions: 219.3K
* Testcase Example: '"1807"\n"7810"'
*
* You are playing the following Bulls and Cows game with your friend: You
* write down a number and ask your friend to guess what the number is. Each
* time your friend makes a guess, you provide a hint that indicates how many
* digits in said guess match your secret number exactly in both digit and
* position (called "bulls") and how many digits match the secret number but
* locate in the wrong position (called "cows"). Your friend will use
* successive guesses and hints to eventually derive the secret number.
*
* Write a function to return a hint according to the secret number and
* friend's guess, use A to indicate the bulls and B to indicate the cows.
*
* Please note that both secret number and friend's guess may contain duplicate
* digits.
*
* Example 1:
*
*
* Input: secret = "1807", guess = "7810"
*
* Output: "1A3B"
*
* Explanation: 1 bull and 3 cows. The bull is 8, the cows are 0, 1 and 7.
*
* Example 2:
*
*
* Input: secret = "1123", guess = "0111"
*
* Output: "1A1B"
*
* Explanation: The 1st 1 in friend's guess is a bull, the 2nd or 3rd 1 is a
* cow.
*
* Note: You may assume that the secret number and your friend's guess only
* contain digits, and their lengths are always equal.
*/
class Solution {
public:
string getHint(string secret, string guess) {
int A=0, B=0;
int N = secret.size();
// bool matched[N]; fill_n(matched, N, false);
int numbers[10];
fill_n(numbers, 10, 0);
for(int i=0;i<N;i++){
if(secret[i] == guess[i])
A++;
else{
if(numbers[secret[i] -'0'] < 0) B++;
if(numbers[guess[i] - '0'] > 0) B++;
numbers[secret[i]-'0']++;
numbers[guess[i]-'0']--;
}
}
return to_string(A) + "A" + to_string(B) + "B";
}
};