class Solution:
def getHint(self, secret: str, guess: str) -> str:
map = {}
n =len(secret)
for i in range(n):
num = secret[i]
if num not in map:
map[num] = set([i])
else:
map[num].add(i)
A,B = 0,0
set_A = set() #记录A数位置
# 扫描guess,第一遍先找数字和位置都对的
for i in range(n):
num = guess[i]
if num in map:
if i in map[num]:
A += 1 #累计A数量
set_A.add(i) #标记A数的位置,下次跳过
map[num].remove(i)
if len(map[num]) == 0: #set为空就应从map移除
del map[num]
# 第二遍找数字对位置不对的
for i in range(n):
if i in set_A:
continue
num = guess[i]
#检测到在map中,B累加1,并将对应set转list,随意弹出一个
if num in map:
B += 1
map[num] = list(map[num])
map[num].pop()
if len(map[num]) == 0: #list为空就应从map移除
del map[num]
return str(A) + "A" + str(B) + "B"
class Solution:
def getHint(self, secret: str, guess: str) -> str:
A = 0
cntS, cntG = [0] * 10, [0] * 10
for s, g in zip(secret, guess):
if s == g:
A += 1
else:
cntS[int(s)] += 1
cntG[int(g)] += 1
B = 0
for s, g in zip(cntS, cntG):
B += min(s, g)
return str(A) + "A" + str(B) + "B"