Leetcode # 299. Bulls and Cows
- 2022.12.12
- LeetCode
https://leetcode.com/problems/bulls-and-cows/
First Solution
Time Complexity: O(len(secret))
Space Complexity: O(len(secret))
(The input and output generally do not count towards the space complexity.)
class Solution: def getHint(self, secret: str, guess: str) -> str: c_in_secret = collections.defaultdict(set) c_in_guess = collections.defaultdict(set) for i, c in enumerate(secret): c_in_secret[c].add(i) A = B = 0 for i, c in enumerate(guess): if c in c_in_secret: if i in c_in_secret[c]: A += 1 c_in_secret[c].remove(i) else: c_in_guess[c].add(i) for c in c_in_guess: B += min(len(c_in_secret[c]), len(c_in_guess[c])) return f"{A}A{B}B"
Better Solution
Time Complexity: O(len(secret))
Space Complexity: O(1)
(The input and output generally do not count towards the space complexity.)
If so far
- guess contains more s characters than secret:
h[s] < 0
(至目前為止 guess 還有未計算過的 s ) - secret contains more g characters than guess:
h[g] > 0
(至目前為止 secret 還有未計算過的 g )
then B += 1
※ $$ int(expression) = \begin{cases} 0 & , \text{if expression is } False \\ 1 & , \text{if expression is } True \end{cases} $$
class Solution: def getHint(self, secret: str, guess: str) -> str: h = collections.defaultdict(int) A = B = 0 for i, s in enumerate(secret): g = guess[i] if s == g: A += 1 else: B += int(h[s] < 0) + int(h[g] > 0) h[s] += 1 # secret has a non-maching character s h[g] -= 1 # guess has a non-maching character g return f"{A}A{B}B"
Last Updated on 2023/08/16 by A1go