#include <iostream> #include <vector> #include <string> #include <unordered_map> #include <climits> using namespace std; int main() { int T; cin >> T; cin.ignore(100, '\n'); // 清空输入缓冲区 // cout << "T==" << T << endl; while (T--) { int n; cin>>n; cin.ignore(100, '\n'); // 清空输入缓冲区 // cout << "n==" << n << endl; string s; cin>>s; cin.ignore(100, '\n'); // 清空输入缓冲区 // cout << "string==" << s <<endl; int ans=-1; if (n==2 && s[0]!=s[1]) { cout << ans << endl; continue; } for (int i=0; i<n-1; i++) { if (i==0 && s[i]==s[n-1]) {ans=0; break;} if (s[i]==s[i+1]) {ans=0; break;} } if (ans==0) {cout<<0<<endl; continue;} // 记录每个属性都有在哪些位置上 unordered_map<char, vector<int>> positions; for (int i=0; i<n; i++) { positions[s[i]].emplace_back(i); } // 计算每个属性不同位置之间的间距 int min_val = INT_MAX; // cout << "position的size=="<<positions.size()<<endl; for (auto it=positions.begin(); it!=positions.end(); it++) { // cout << "当前position.vector的size=="<<it->second.size()<<endl; if ((it->second).size()==1) {continue;} vector<int> temp=it->second, dis; for (int i=0; i<it->second.size(); i++) { int dis_i; if (i==it->second.size()-1) { // cout << "n==" << n << ", temp[0]==" << temp[0] << ", temp[" << i << "]==" << temp[i] << endl; dis_i = (n + temp[0]) - temp[i] - 1; } else dis_i = temp[i+1] - temp[i] - 1; // cout << "dis_i==" <<dis_i<<endl; min_val = min(min_val, dis_i); dis.emplace_back(dis_i); } } if (min_val == INT_MAX) { cout << -1 << endl; continue; } else { // cout<<"min_val=="; cout<<min_val<<endl; continue; } } } // 64 位输出请用 printf("%lld")