如注释,比较笨的办法。

1、先找到所有重复元素(作为字典的键)及其位置(存储为列表作为字典的值),

2、然后遍历所有重复元素的位置,寻找最小相邻距离。

import sys
m = int(input())
for _ in range(m):
    n = int(input())
    bras = input()
    sbra = set(bras)
    if len(sbra)==len(bras):#利用集合去重,如果没有重复元素
        print(-1)
        continue
    dic = dict()#重复元素为键,重复元素在列表中的位置列表为值
    for c in sbra:#遍历列表所有的元素
        if bras.count(c)==1:#如果当前元素值出现一次,那不可能让当前元素相邻,推出
            continue
        for i in range(n):#遍历列表,寻找重复元素的位置
            if bras[i]==c:#找到重复元素
                if c not in dic.keys():
                    dic[c] = [i]
                else:
                    dic[c].append(i)
    minl = n#最小相邻值初始化为输入手串长度
    for c in dic.values():#遍历所有重复元素,寻找最小相邻值
        for i in range(o:=len(c)):
            if i==o-1:#遍历到末尾元素时
                minl = min(minl, c[0]+n-c[i]-1)
                break
            minl = min(minl, c[i+1]-c[i]-1)#遍历到非末尾元素时
    print(minl)