

- 3번: 어떤 문자를 k개 포함하는 가장 짧은 연속 문자열의 길이 구하기 (결국 시작과 끝이 어떤 문자여야 가장 짧아짐)
- 4번: 어떤 문자를 k개 포함하면서 시작과 끝이 해당 문자인 가장 긴 연속 문자열의 길이 구하기
-> 3번과 4번은 각각 따로
t = int(input())
def get_min_max_str(w_set_list, k, w):
w_list = list(w)
min_len = 99999
max_len = 0
for target in w_set_list:
target_list = []
for index, a in enumerate(w_list):
if a == target:
target_list.append(index)
if len(target_list) < k:
continue
elif len(target_list) == k:
# 가장 짧은 문자열
if target_list[-1] - target_list[0] + 1 < min_len:
min_len = target_list[-1] - target_list[0] + 1
# 가장 긴 문자열
if target_list[-1] - target_list[0] + 1 > max_len:
max_len = target_list[-1] - target_list[0] + 1
else: # len이 k보다 더 클 경우 최소 길이 조합을 찾아야 함
mins = 99999
start = 0
end = k - 1
maxs = 0
while start < len(target_list) and end < len(target_list):
if target_list[end] - target_list[start] + 1 < mins:
mins = target_list[end] - target_list[start] + 1
if target_list[end] - target_list[start] + 1 > maxs:
maxs = target_list[end] - target_list[start] + 1
start += 1
end += 1
if mins < min_len:
min_len = mins
if maxs > max_len:
max_len = maxs
one = min_len
two = max_len
if one == 99999:
one = -1
if two == 0:
two = -1
if one == -1 and two == -1:
print(-1)
return
print(one, two)
return
for _ in range(t):
w = input()
k = int(input())
w_list = list(w)
w_set = set(w_list)
w_set_list = list(w_set)
get_min_max_str(w_set_list, k, w)