题解 | 宝石手串

宝石手串

https://www.nowcoder.com/practice/9648c918da794be28575dd121efa1c50

// 活动地址: 牛客春招刷题训练营 - 编程打卡活动
#include<iostream>
#include<algorithm>
#include<cmath>
#include<vector>
#define int long long 

using namespace std;



void solve(){
    string s;
    int n;
    cin>>n;
    cin>>s;
    // 因为是环装 所以s*2
    s=s+s;
    // 用来存储 每个字母上次出现的位置
    vector<int>pos(30,-1);
    int ans=n-1;
    // 初始给设为长度减一
    for(int i=0;i<s.size();i++){
        // 取最小
        if(pos[s[i]-'a']!=-1)ans=min(ans,i-pos[s[i]-'a']-1);
         pos[s[i]-'a']=i;
    }
    // 如果没变 输出-1
    if(ans>=n-1)cout<<"-1"<<"\n";
    else cout<<ans<<"\n";
}

signed main(){
    int T=1;
    ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    cin>>T; // T 组数据
    while(T--){
        solve();
    }
    return 0;
}
// 活动地址: 牛客春招刷题训练营 - 编程打卡活动

全部评论

相关推荐

不愿透露姓名的神秘牛友
今天 16:26
点赞 评论 收藏
分享
03-27 17:33
门头沟学院 Java
代码飞升:同学院本,你要注意hr当天有没有回复过,早上投,还要打招呼要推销自己,不要一个劲投
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务