fork(1) download
  1. #include <iostream>
  2. #include <cstring>
  3. using namespace std;
  4.  
  5. int main() {
  6. //Инициализируем массивы, удовлетворяющие условия
  7. char b[100001], a[100001];
  8. cin >> b >> a;
  9. // b-строка до (before), a-строка после (after)
  10. int s = 0, l1 = strlen(b), l2 = strlen(a), e1 = l1, e2 = l2;
  11. //определяем длины первой и второй строк, без учёта нуль-символа.
  12.  
  13. // Проверяем есть ли символ в массиве b[s],
  14. // Если есть и он такой же, как и в массиве a[s] - счётчик увеличиваеться
  15. // в результате мы узнаём на каком, крайнем слева, символе начинаются расхождения (s)
  16. for (; b[s] && b[s] == a[s]; ++s);
  17.  
  18. // Цикл проходиться по массиву a и b с конца введённых в них строк
  19. // Цикл двигаеться по массиву до первого расхождения в буквах (b[e1]!=a[e2])
  20. // в результате мы узнаём на каком, крайнем справа, символе начинаются расхождения (e2)
  21. for (; e1>=0 && e2>=0 && b[e1]==a[e2]; --e1, --e2);
  22.  
  23. // Считаем максимальное количество букв, которые подверглись расхождению, ищя максимальное от
  24. // максимального между 0 и разницей в кол-ве символов второй строки от первой и
  25. // разницей между крайним правым и крайим левым номерм элемента на котором начались расхождения + 1(погрешность)
  26. cout << max(max(0,l2-l1),e2-s+1) << endl;
  27. }
Success #stdin #stdout 0s 4792KB
stdin
AAAAA
AGCGAA
stdout
3