fbpx

Problema #2132 – min_subsir – Rezolvari PBInfo

de Mihai-Alexandru

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

S-ar putea sa iti placa