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