0846 - Dubluri: Diferență între versiuni

De la Universitas MediaWiki
Fără descriere a modificării
 
(Nu s-a afișat o versiune intermediară efectuată de un alt utilizator)
Linia 17: Linia 17:
<br>
<br>


== Exemplu 2 ==
== Exemplul 2 ==
; Intrare
; Intrare
  Bunaziua
  Bunaziua
Linia 23: Linia 23:
  Datele de intrare nu corespund restrictiilor impuse
  Datele de intrare nu corespund restrictiilor impuse
<br>
<br>
== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
Linia 58: Linia 59:


</syntaxhighlight>
</syntaxhighlight>
== Explicatie ==
Sirul '''aadd''' apare de două ori șirul dat. Niciun șir de lungime mai mare nu apare de cel puțin două ori. Să observăm că și șirul '''ddcc''' apare de două ori, dar ele este mai mare decât '''aadd''', în ordinea lexicografică.

Versiunea curentă din 26 decembrie 2023 14:35

Cerinţa

Se dă un șir de caractere ce conține doar litere mici ale alfabetului englez. Să se afișeze cel mai lung subșir care apare de cel puțin două ori în șirul dat.

Date de intrare

Programul citește de la tastatură șirul dat.

Date de ieșire

Programul va afișa pe ecran cel mai lung subșir cu cel puțin două apariții.

Restricţii şi precizări

  • șirul dat are cel mult 255 caractere
  • dacă există mai multe subșiruri de lungime maximă care apar de cel puțin două ori, se va afișa primul în ordine lexicografică.
  • pentru toate datele de test există cel puțin un subșir din cel puțin două caractere, care se repetă

Exemplul 1

Intrare
cbddccdaaddccaaddbccbbdbddd
Iesire
Datele de intrare corespund restrictiilor impuse
aadd


Exemplul 2

Intrare
Bunaziua
Iesire
Datele de intrare nu corespund restrictiilor impuse


Rezolvare

def main():
    # Citirea șirului de caractere de la tastatură
    sir = input().strip()

    # Verifică dacă șirul respectă restricțiile
    if len(sir) > 255:
        print("Datele de intrare nu corespund restrictiilor impuse")
        return
    if any(not caracter.islower() for caracter in sir):
        print("Datele de intrare nu corespund restrictiilor impuse")
        return

    print("Datele de intrare corespund restrictiilor impuse")

    # Căutarea celui mai lung subșir care apare de cel puțin două ori
    lungime_maxima = 0
    subșir_maxim = ''
    for i in range(len(sir)):
        for j in range(i+2, len(sir)+1):
            subșir = sir[i:j]
            if sir.count(subșir) >= 2 and len(subșir) > lungime_maxima:
                lungime_maxima = len(subșir)
                subșir_maxim = subșir
            elif len(subșir) == lungime_maxima and subșir < subșir_maxim:
                subșir_maxim = subșir

    # Afișarea subșirului obținut
    print(subșir_maxim)

if __name__ == "__main__":
    main()

Explicatie

Sirul aadd apare de două ori șirul dat. Niciun șir de lungime mai mare nu apare de cel puțin două ori. Să observăm că și șirul ddcc apare de două ori, dar ele este mai mare decât aadd, în ordinea lexicografică.