牛客竞赛 1015 最短合法子串

代码

#include<bits/stdc++.h>
using namespace std;
int mp[39];
int main() {
    string s;
    cin>>s;
    int cnt = 0;
    int ans = 0x3f3f3f3f;
    int n = s.length();
    for (int i = 0 ,j=-1; i < n; i++) {

        while (j < n-1 && cnt<26) {
            j++;
            mp[s[j]-'a']++;
            if (mp[s[j]-'a']==1)
                cnt++;
            if (cnt == 26)
                break;
        }
        if (cnt==26)
            ans = min(ans,j-i+1);
        mp[s[i]-'a']--;
        if (mp[s[i]-'a']==0)
            cnt--;
    }
    if(ans == 0x3f3f3f3f)cout<<-1;
    else cout<<ans;
    return 0;
}
posted @ 2025-06-19 10:25  Guaninf  阅读(9)  评论(0)    收藏  举报