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.
For example:
Secret number: “1807”
Friend’s guess: “7810”
Hint: 1 bull and 3 cows. (The bull is 8, the cows are 0, 1 and 7.)
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. In the above example, your function should return “1A3B”.
Please note that both secret number and friend’s guess may contain duplicate digits, for example:
Secret number: “1123”
Friend’s guess: “0111”
In this case, the 1st 1 in friend’s guess is a bull, the 2nd or 3rd 1 is a cow, and your function should return “1A1B”.
You may assume that the secret number and your friend’s guess only contain digits, and their lengths are always equal.
解法1: O(N) Time , 一次遍历
参考了[这个][1]的解法, 只需要一次遍历即可。思路是按位一个个遍历,如果碰到一样的字符则bull加1。 如果碰到不一样的字符,secret的字符对应的+1, guess对应的减1。这样就同时保存了secret和guess出现的字符的情况。 如果后续碰到如果secret字符对应的次数为负,则证明在guess中出现过; 如果guess字符对应的次数为正,则说明在secret中出现过。 这样的话就能记录一次cow。
C++
Java