#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。 参与链接

京公网安备 11010502036488号