(LeetCode)Bulls and Cows --- 数字匹配问题

来源:互联网 发布:golang redis pool 编辑:程序博客网 时间:2024/06/01 07:20

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 01 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.

Credits:
Special thanks to @jeantimex for adding this problem and creating all test cases.

Subscribe to see which companies asked this question




解题分析:


     对于此题的理解是这样的,首选给出两个字符串,一个是secret   一个是guess,

然后分别按着 secert 的每一位去对比guess对应位置,若对应位置的元素值相同,则我们在bull上加一,如果没有的话我们在cow上加一(注:此处需要将重复的数字去重,多个重复的我们只算一次)。


   方法,首先选出对应位置的加在bull,然后在剩余的数字中去重,最后加到cow中。



# -*- coding:utf-8 -*-__author__ = 'jiuzhang'class Solution(object):    def getHint(self, secret, guess):        digit = {}        bull = 0        for i in xrange(len(secret)):            if guess[i] == secret[i]:                bull += 1            else:                if guess[i] not in digit:                    digit[guess[i]] = 1                else:                    digit[guess[i]] += 1        cow = 0        for i in xrange(len(secret)):            if guess[i] != secret[i] and secret[i] in digit and digit[secret[i]]>0:               digit[secret[i]] -= 1               cow += 1        return str(bull) + 'A' + str(cow) + 'B'


0 0
原创粉丝点击