from collections import defaultdict
N = int(input())
arr = list(input())
cnt_dict = defaultdict(int)
result = 0
prev_idx = -1
for idx in range(N):
alpha = arr[idx]
cnt_dict[alpha] = idx
if len(cnt_dict) > N:
min_idx = 100001
min_key = -1
for key in cnt_dict:
if min_idx > cnt_dict[key]:
min_idx = cnt_dict[key]
min_key = key
prev_idx = min_idx
del cnt_dict[min_key]
result = max(result,idx-prev_idx)
print(result)
전형적인 두 포인터 문제이고, 그걸 다른 방식으로 푼 것이다.
defalutdict를 통해, 각 알파벳의 마지막 위치를 저장시켜주고,
그 길이가 N을 넘어서게 되면, 마지막 위치가 가장 작은 알파벳을 삭제해주는 방식으로 해주고
prev_idx를 갱신해준다
위와 같은 방식을 통해 문제를 풀어주면 된다.
.
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ/백준] 4358 생태학 (0) | 2021.07.12 |
---|---|
[BOJ/백준] 16947 서울 지하철 2호선 (0) | 2021.07.12 |
[BOJ/백준] 16398 행성 연결 (0) | 2021.06.29 |
[BOJ/백준] 15661 링크와 스타트 (0) | 2021.06.29 |
[BOJ/백준] 10711 모래성 (0) | 2021.06.29 |