在我自己的不断Debug下,好不容易写出来一个版本,然而Time Limit Exceeded~~~
class Solution(object):
def getHint(self, secret, guess):
"""
:type secret: str
:type guess: str
:rtype: str
"""
str_secret=list(secret)
str_guess=list(guess)
count_A=0
a=[]
b=[]
count_B=0
for i in range(len(str_secret)):
if str_secret[i]==str_guess[i]:
count_A+=1
a.append(i)
b.append(i)
for i in range(len(str_secret)):
if i not in a:
for j in range(len(str_guess)):
if str_secret[i]==str_guess[j]:
if j not in b:
count_B+=1
b.append(j)
break
return str(count_A)+'A'+str(count_B)+'B'
正确版本:
Key::思路非常巧妙,巧妙使用dict和set的组合,将secret和guess分别变成以下格式:
secret: {'0':{位置索引1,位置索引2},'1':{},'2':{},'3':{},........'9':{}}
guess: {'0':{位置索引1,位置索引2},'1':{},'2':{},'3':{},........'9':{}}
Code:
class Solution(object):
def getHint(self, secret, guess):
"""
:type secret: str
:type guess: str
:rtype: str
"""
sc={}
gc={}
for i in range(10):
sc[str(i)]=set()
gc[str(i)]=set()
for i in range(len(secret)):
sc[secret[i]].add(i)
gc[guess[i]].add(i)
count_A=0
count_B=0
for i in range(10):
temp=len(sc[str(i)].intersection(gc[str(i)]))
count_A +=temp
count_B +=min(len(sc[str(i)]),len(gc[str(i)]))-temp
return str(count_A)+'A'+str(count_B)+'B'