fork(1) download
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4.  
  5. int main() {
  6. string s;
  7. getline(cin, s);
  8. int max = 0; // Длина наибольшей грани
  9. for(int i = 1; i < s.length() && s.length() - i > max; i++) {
  10. int j = 0;
  11. /*
  12. Перебираем различные длины префиксов (суффиксов), пока не дойдем до длины 1 и пока можем встретить грань, длиннее хранящейся.
  13. i - первый символ очередного суффикса
  14. j - длина текущей грани и первый символ очередного префикса
  15. */
  16. while(j < s.length() - i && s.at(j) == s.at(i + j)) // Накапливаем длину, пока символы префикса и суффикса совпадают
  17. j++;
  18. if(j > max) // Если длина текущей грани больше хранящейся, обновляем максимум
  19. max = j;
  20. }
  21. cout << max;
  22. return 0;
  23. }
Success #stdin #stdout 0s 3416KB
stdin
f0A+.f0A+.f0A.+.A0f
stdout
8