fork(2) download
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. using namespace std;
  5.  
  6. int main() {
  7. string s;
  8. getline(cin,s); // используем данную функцию, так как это выгодно по времени
  9. int n = s.length();
  10. vector<int> z (n);//вектор на n элеметов, в который будут записыватья значения блоков функции
  11. int l=0, r=0; //левая и правая граница "отрезка совпадения"
  12. for (int i=1; i<n; i++) {
  13. if (i <= r)
  14. z[i] = min (r-i+1, z[i-l]);
  15. while (i+z[i] < n && s[z[i]] == s[i+z[i]])
  16. z[i]++;
  17. if (i+z[i]-1 > r){
  18. l = i;
  19. r = i+z[i]-1;
  20. }
  21. }
  22. int max=z[0];
  23. for (int i=1; i<z.size(); i++){
  24. if (max<z[i]){
  25. max=z[i];
  26. }
  27. }
  28. cout<<max<<endl;
  29. return 0;
  30. }
Success #stdin #stdout 0s 3464KB
stdin
aabaaab
stdout
3