题目

你在和朋友一起玩 猜数字(Bulls and Cows)游戏,该游戏规则如下:

写出一个秘密数字,并请朋友猜这个数字是多少。朋友每猜测一次,你就会给他一个包含下述信息的提示:

猜测数字中有多少位属于数字和确切位置都猜对了(称为 “Bulls”, 公牛), 有多少位属于数字猜对了但是位置不对(称为 “Cows”, 奶牛)。也就是说,这次猜测中有多少位非公牛数字可以通过重新排列转换成公牛数字。 给你一个秘密数字 secret 和朋友猜测的数字 guess ,请你返回对朋友这次猜测的提示。

提示的格式为 “xAyB” ,x 是公牛个数, y 是奶牛个数,A 表示公牛,B 表示奶牛。

请注意秘密数字和朋友猜测的数字都可能含有重复数字。

题解

公牛:比较同位置数字一样,计数+1
母牛:同位置数字不一样,统计secret和guess各个数字出现次数,然后同一个数字取出现次数最少的,然后求和

Code

  1. class Solution:
  2. def getHint(self, secret: str, guess: str) -> str:
  3. bulls = 0
  4. sCounts = [0] * 10
  5. gCounts = [0] * 10
  6. for i in range(len(secret)):
  7. s = int(secret[i])
  8. g = int(guess[i])
  9. if s == g:
  10. bulls += 1
  11. else:
  12. sCounts[s] += 1
  13. gCounts[g] += 1
  14. cows = sum([min(sCounts[i],gCounts[i]) for i in range(10)])
  15. return str(bulls) + 'A' + str(cows) + 'B'