如注释,比较笨的办法。
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)