1 条题解

  • 0
    @ 2026-8-13 20:29:29
    #include<iostream>
    #include<climits>
    #include<cstring>
    using namespace std;
    
    int arr[1000010],cnt[2010],l,r;
    int ans,ansl,ansr,sum;
    
    void solve(){
        memset(cnt,0,sizeof(cnt));
        ans=INT_MAX;
        l=r=ansl=ansr=1;
        sum=0;
    
        string s;
        cin>>s;
        
        int n=s.size(),m=3;
        for(int i=1;i<=n;i++){
            arr[i]=s[i-1]-'0';
        }
        while(l<=r&&r<=n+1){
            if(sum<m){
                r++;
                cnt[arr[r-1]]++;
                if(cnt[arr[r-1]]==1){
                    sum++;
                }
            }else{
                if(ans>r-l){
                    ans=r-l;
                    ansl=l;
                    ansr=r-1;
                }
                cnt[arr[l]]--;
                if(cnt[arr[l]]==0){
                    sum--;
                }
                l++;
            }
        }
        cout<<(ans>=INT_MAX/2 ? 0 : ans)<<"\n";
        return ;
    }
    
    int main(){
        int t;
        cin>>t;
        while(t--){
            solve();
        }
    }
    

    信息

    ID
    7276
    时间
    2000ms
    内存
    256MiB
    难度
    2
    标签
    递交数
    8
    已通过
    4
    上传者