278
Se consideră un șir de caractere format din caractere literă mică ale alfabetului englez
Cerința
Să se determine lungimea minimă a unui subșir al șirului dat, subșir ce folosește toate literele întâlnite în șirul inițial.
Date de intrare
Programul citește de la tastatură șirul de caractere.
Date de ieșire
Programul va afișa pe ecran lungimea subșirul cerut.
Restricții și precizări
1 ≤ lungime șir ≤ 10000
Exemplu
Intrare
aadcaabcbacadca
Ieșire
5
Explicație
Sunt folosite literele: a,b,c,d
.
Subșiruri de lungime minimă care folosesc toate literele: dcaab
, bacad
.
#include <bits/stdc++.h> using namespace std; int a[30]; int main() { string s; cin >> s; unsigned int nrlitdif=0,i,j=0,Min=s.size(),k=0; for (i = 0; i<s.size(); i++) if (!a[s[i]-'a']) { a[s[i]-'a'] = -1; nrlitdif++; } for (i = 0; i<s.size();) { a[s[i]-'a']++; if (!a[s[i]-'a']) k++; if (k == nrlitdif) { while (a[s[j]-'a']!=0) { a[s[j]-'a']--; j++; } Min = min(Min,i-j+1); } i++; } cout << Min; }
Comentarii