def solution(s):
answer = []
stack=[0]*26
for i in range(len(s)):
k=stack[ord(s[i])-97]
# print(s[i], ord(s[i])-97, k)
if k==0:
answer.append(-1)
else:
answer.append(i-k+1)
stack[ord(s[i])-97]=i+1
return answer
알파벳의 최근 위치를 담을 리스트 stack에 알파벳의 개수 만큼 0으로 초기화를 해준 후
문자열 s를 차례로 돌면서
각 문자에 해당하는 번째 수(a:0, b:1, ... ,) 를 stack에 대입하여 각 문자열의 최근 위치 k를 구한다.
만약 k가 0이면 그 전에 k가 나온 적 없었으니 answer에 -1을 넣어주고,
k가 0이 아니면 현위치(해당하는 번째수)에서 그 전의 위치를 빼서 구한 간격을 answer에 넣어준다.
이후 (k값과 무관하게) stack을 현위치로 업데이트 해준다.
먼저 else: answer.append(i-k) stack[ord(s[i])-97]=i
로 풀었는데 테스트케이스 'aaa' 와 같은 경우에서 오류가 났다. ('aaa' -> [-1,1,1] )
def solution(s):
answer = []
s_dict = dict()
for i in range(len(s)):
if s[i] not in s_dict:
answer.append(-1)
else:
answer.append(i-s_dict[s[i]])
s_dict[s[i]] = i
return answer
def solution(s):
answer = []
dict = {}
for index, word in enumerate(s):
if word not in dict:
answer.append(-1)
dict[word] = index
else:
answer.append(index - dict[word])
dict[word] = index
return answer
k={1: 'a'}
k[2]='b'
----> k = {1: 'a', 2: 'b'}