Cerința
Se dă un șir de caractere ce conține doar litere mici ale alfabetului englez. Să se afișez cel mai lung subșir care apare de cel puțin două î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ă
Exemplu
Intrare
cbddccdaaddccaaddbccbbdbddd
Ieșire
aadd
Explicație
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ă.
#include <bits/stdc++.h> using namespace std; char s[256], c[130], r[129]; int n, nrap; int main() { cin.getline(s, 256); n = strlen(s)/2; for(int i = 2; i <= n; i++) { for(int j = 0; s[j] != '\0'; j++) { strcpy(c,""); strncpy(c, s+j, i); c[i] = '\0'; nrap = 0; char* p = strstr(s+j, c); while(p && nrap < 2) { nrap++; if(nrap > 1) { if(strlen(c)>strlen(r))strncpy(r, c, i); else if(strlen(c) == strlen(r) && strcmp(r, c)>0)strncpy(r, c, i); } p=strstr(p+i, c); } } } cout << r; return 0; }