每个测试文件均包含多组测试数据。第一行输入一个整数
代表数据组数,每组测试数据描述如下:
第一行输入一个整数
代表手串初始的宝石数量。
第二行输入一个长度为
、仅由小写字母构成的字符串,代表手串上每个宝石的属性。
除此之外,保证单个测试文件的
之和不超过
。
对于每一组测试数据,如果手环无法破坏,直接输出
;否则,在一行上输出一个整数,代表手串断开需要的最少操作次数。
2 2 ac 3 aac
-1 0
N = int(input())
while 1:
try:
n = int(input())
ls = list(input())
count = n
code = {}
for i in range(n):
if ls[i] in code:
code[ls[i]].append(i)
else:
code[ls[i]] = []
code[ls[i]].append(i)
psbls = []
for x in code.items():
if len(x[1])>1:
psbls.append(x[0])
if len(psbls) == 0:
print(-1)
else:
for x in psbls:
for i in range(len(code[x])-1):
if (code[x][i+1] - code[x][i]-1)<count:
count = code[x][i+1] - code[x][i]-1
if (n - code[x][-1] + code[x][0] - 1)<count:
count = n - code[x][-1] + code[x][0] - 1
print(count)
except:
break m=int(input())
for _ in range(m):
n=int(input())
m=input()
if n==2 and m[0]!=m[1]:
print(-1)
else:
last={}
for j,k in enumerate(m):#abcdajlc
if k not in last:
last[k]=j
else:
print(j-last[k]-1)
def compute(n,s):
my_dict = {}
# value是三元组 首位置 上一个位置 最小距离
for i in range(n):
a = s[i]
if a in my_dict:
my_dict[a][2] = min(my_dict[a][2],min(i-my_dict[a][1]-1,my_dict[a][0]+n-1-i))
my_dict[a][1] = i
else:
my_dict[a] = [i,i,n+1]
ans = min([value[-1] for value in my_dict.values()])
return ans if ans<n else -1
T = int(input())
for i in range(T):
n = int(input())
s = str(input())
print(compute(n,s))