299.猜数字游戏
一、
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"二、
最后更新于