299. Bulls and Cows

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.

def getHint(self, secret: str, guess: str) -> str:
	bulls = 0
	l = len(secret)
	s, g = {}, {}
	for i in range(l):
		if secret[i] == guess[i]:
			bulls += 1
		else:
			if secret[i] in s:
				s[secret[i]] += 1
			else:
				s[secret[i]] = 1
			if guess[i] in g:
				g[guess[i]] += 1
			else:
				g[guess[i]] = 1
	cows = 0
	for i in s.keys():
		if i in g.keys():
			cows += min(s[i], g[i])
	return str(bulls)+'A'+str(cows)+'B'