#include<bits/stdc++.h> using namespace std; int a[26],b[26]; //a数组用于存放某一字母第一次出现的位置 //b数组用于存放到达 某位置 之前的某一字母最后一次出现的位置 //"aca"中'a'最后一次出现在第三个位置,所以b[0]=3,a[0]=1; int main(){ int T;cin>>T; int n; while(T--){ cin>>n; string s; cin>>s; int mn=100000; for(int i=0;i<n;i++){//更新b数组 if(!a[s[i]-97])a[s[i]-97]=i+1,b[s[i]-97]=i+1; else{mn=min(mn,i-b[s[i]-97]);b[s[i]-97]=i+1;} //每次出现的字母与该字母上一次出现位置的距离 } bool pan=false;//用于判断该字符串中所有字母是否仅出现一次 for(int i=0;i<26;i++){ //特殊判断某字母第一次出现与该字母最后一次出现 if(b[i]!=a[i])pan=true; if(a[i]&&a[i]!=b[i])mn=min(n-b[i]+a[i]-1,mn); //排除某一字母仅出现一次和未出现过的情况 a[i]=b[i]=0; } if(pan) cout<<mn<<endl; else cout<<"-1"<<endl;//所有字母仅出现一次不可能使手链断裂 } return 0; }