fork download
  1. #include <iostream>
  2. #include <cstring>
  3. using namespace std;
  4.  
  5. int main() {
  6. char s1[1000], s2[1000], secCom[1000];
  7. cin.getline(s1, 1000);
  8. int lgs1 = strlen(s1);
  9. cin.getline(s2, 1000);
  10. int lgs2 = strlen(s2);
  11. int maxim = 0, lgsecCom = 0, incepSecCom = 0,
  12. maxLit = 0, incepS1 = 0;
  13. for (int i = incepS1; i < lgs1 && lgs1 - i > lgsecCom; ++i){ // doar daca lung. sec. din s1 si s2
  14. for (int j = 0; j < lgs2 && lgs2 - j > lgsecCom; ++j ){ // ramasa de comp. este mai mare decat lg secCom
  15. int nrLit = 0;
  16. if (isalpha(s1[i]) && s1[i] == s2[j]){
  17. incepSecCom = i;
  18. int i1 = i;
  19. while (i1 < lgs1){
  20. if (s1[i1] == s2[j]){ // numaram lit. com. din ambele siruri incepand
  21. ++nrLit; // de la pozitiile cu lit egale gasite
  22. ++j;
  23. ++i1;
  24. }
  25. else {
  26. break;
  27. }
  28. }
  29. if (nrLit > maxLit)
  30. maxLit = nrLit; // retinem nr maxim de lit com la fiecare sec
  31. if (nrLit > maxim){
  32. maxim = nrLit;
  33. lgsecCom = strlen(secCom); // retinem sec max com intr-un sir care se reseteaza de la 0 de fiecare data cand primeste alta secv
  34. for (int i = 0; i < lgsecCom; ++i){
  35. secCom[i] = 0;
  36. }
  37. strncpy(secCom, s1 + incepSecCom, nrLit);
  38. lgsecCom = strlen(secCom); // actualizam lung secCom
  39. }
  40. }
  41. }
  42. incepS1 = incepSecCom + maxLit; // poz de la care se va continua comp. in S1
  43. }
  44. cout << secCom;
  45. return 0;
  46. }
Success #stdin #stdout 0s 5324KB
stdin
cine st vine
cine vine
stdout
cine