#include <iostream>
#include <vector>
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        string str;
        cin>>str;
//jingen
        vector<int> a[27];//a[i][j]为该字母的下标 i是英文字母转化为数字存,j是该字母有多少个
        for(int i=0;i<n;i++)
        {
            a[str[i]-'a'].push_back(i+1);
        }
         
        int mi=100010;
        int ans1=0,ans2=0;
         
        for(int i=0;i<26;i++)
       {
           int x=a[i].size();
           if(x>=2)
           {
              for(int j=1;j<x;j++)// abcad
              {
                   mi=min(mi,(a[i][j]-a[i][j-1]));//更新最近的两个字母
              }
               mi=min(mi,(a[i][0]+n-a[i][x-1]));//更新最小值是否小于首位两个字母距离
          }
       }
        if(mi==100010)
        {
            cout<<"-1"<<endl;
        }
          else cout<<mi-1<<endl;
     }
}

对于字符串,用vector 数组来存他的每个位置,mi更新最近的两个字符的位置,若mi没有更新,即无解,输出-1。 参与链接