299. Bulls and Cows

Difficulty:
Related Topics:
Similar Questions:

    Problem

    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:

    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:

    Solution (Java)

    class Solution {
        public String getHint(String secret, String guess) {
            final int[] ans = new int[10];
            int bulls = 0;
            int cows = 0;
            for (int i = 0; i < secret.length(); i++) {
                final int s = Character.getNumericValue(secret.charAt(i));
                final int g = Character.getNumericValue(guess.charAt(i));
                if (s == g) {
                    bulls++;
                } else {
                    // digit s was already seen in guess, is being seen again in secret
                    if (ans[s] < 0) {
                        cows++;
                    }
                    // digit was already seen in secret, now being seen again in guess
                    if (ans[g] > 0) {
                        cows++;
                    }
                    ans[s]++;
                    ans[g]--;
                }
            }
            return bulls + "A" + cows + "B";
        }
    }
    

    Explain:

    nope.

    Complexity:

    Solution (Javascript)

    /**
     * @param {string} secret
     * @param {string} guess
     * @return {string}
     */
    var getHint = function(secret, guess) {
        var len = secret.length;
        var bull = 0;
        var cow = 0;
        var i;
        var secretArr = secret.split("").map(function(e) { return Number.parseInt(e); });
        var guessArr = guess.split("").map(function(e) { return Number.parseInt(e); });
    
        for(i = 0; i < len;){
            if(secretArr[i] === guessArr[i]){
                bull += 1;
                secretArr.splice(i, 1);
                guessArr.splice(i, 1);
                len--;
            } else {
                i++;
            }
        }
    
        for(i = 0; i < guessArr.length; i++){
            if(secretArr.indexOf(guessArr[i]) > -1){
                cow++;
                secretArr.splice(secretArr.indexOf(guessArr[i]), 1);
            }
        }
    
        return bull+'A'+cow+'B';
    };
    

    Explain:

    nope.

    Complexity: