17.5 The Came of Master Mind is played as follows: The computer has four slots, and each slot will contain a ball that is red (R), yellow (Y), green (C) or blue (B). For example, the computer might have RGGB (Slot # 1 is red, Slots #2 and #3 are green, Slot #4 is blue). You, the user, are trying to guess the solution. You might, for example, guess YRGB. When you guess the correct color for the correct slot, you get a "hit." If you guess a color that exists but is in the wrong slot, you get a "pseudo-hit." Note that a slot that is a hit can never count as a pseudo-hit. For example, if the actual solution is RGBYandyou guess GGRR, you have one hit and one pseudo-hit. Write a method that, given a guess and a solution, returns the number of hits and pseudo-hits.
LeetCode上的原题,讲解请参见我之前的博客Bulls and Cows。
解法一:
string getHint(string answer, string guess) { int m[256] = {0}, h = 0, p = 0; for (int i = 0; i < answer.size(); ++i) { if (answer[i] == guess[i]) ++h; else ++m[answer[i]]; } for (int i = 0; i < answer.size(); ++i) { if (answer[i] != guess[i] && m[guess[i]]) { ++p; --m[guess[i]]; } } return to_string(h) + "H" + to_string(p) + "P"; }
解法二:
string getHint(string answer, string guess) { int m[256] = {0}, h = 0, p = 0; for (int i = 0; i < answer.size(); ++i) { if (answer[i] == guess[i]) ++h; else { if (m[answer[i]]++ < 0) ++p; if (m[guess[i]]-- > 0) ++p; } } return to_string(h) + "H" + to_string(p) + "P"; }