0846 - Dubluri: Difference between revisions
No edit summary |
|||
Line 59: | Line 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ă. |
Latest revision as of 14:35, 26 December 2023
Cerinţa[edit | edit source]
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[edit | edit source]
Programul citește de la tastatură șirul dat.
Date de ieșire[edit | edit source]
Programul va afișa pe ecran cel mai lung subșir cu cel puțin două apariții.
Restricţii şi precizări[edit | edit source]
- ș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[edit | edit source]
- Intrare
cbddccdaaddccaaddbccbbdbddd
- Iesire
Datele de intrare corespund restrictiilor impuse aadd
Exemplul 2[edit | edit source]
- Intrare
Bunaziua
- Iesire
Datele de intrare nu corespund restrictiilor impuse
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line> 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()
</syntaxhighlight>
Explicatie[edit | edit source]
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ă.