# PBinfo #3802 – MinLexSwap – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: Darius

## Enunț

Cerința
Scrieți funcția care are antetul:

string MinLexSwap(string s)
Funcția primește ca parametru un șir de litere mici s și va returna șirul minim lexicografic, diferit de s, obținut prin interschimbarea a exact două litere diferite din s.

Restricții și precizări

s conține numai litere mici
s are cel puțin două litere și cel mult 100.000 de litere
s are cel puțin două litere distincte
Puteți utiliza în rezolvare orice structură de date

Exemplu:
Dacă s="bdcabe", atunci funcția va returna adcbbe.

Important
Soluţia propusă va conţine doar funcţia cerută. Prezenţa în soluţie a altor instrucţiuni poate duce la erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.

## Cod sursă C++

```cpp
string MinLexSwap(string s)
{
    int i, j, n;
    string t;
    n = s.length();
    t = s;
    sort(t.begin(), t.end());
    if (s == t) /// s este ordonat crescator
    {
        j = i = n - 1;
        while (s[j] == s[i])
            j--;
        swap(s[j + 1], s[j]);
        return s;
    }
    for (i = 0; s[i] == t[i]; i++)
        ;
    for (j = n - 1; s[j] != t[i]; j--)
        ;
    swap(s[i], s[j]);
    return s;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/3802)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/3802/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-3802/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
