Напишіть програму або функцію, яка, з урахуванням двох рядків ASCII Aі B, буде створювати рядки A'і B'там, де загальні підрядки повернені на їх місце. Процес пошуку A'такий:
A'спочатку порожній.- Якщо перший символ
AуB, знайдіть найдовший префіксAякого є підрядкомB. Видаліть цей префіксAі додайте його сторнування доA'. - В іншому випадку видаліть цього першого символу
Aта додайте його доA'. - Повторіть кроки 2-3, поки
Aне заповниться.
Пошук B'робиться аналогічно.
Приклад
Розглянемо рядки A = "abc bab"і B = "abdabc". Бо A'ось що відбувається:
A = "abc bab": Перший символ"a"знаходиться в B, а найдовший префікс A, знайдений у B, - це"abc". Видаляємо цей префікс з A і додаємо його сторнування"cba"до A '.A = " bab": Перший символ" "не в B, тому ми видаляємо цей символ з A і додаємо його до A '.A = "bab": Перший символ"b"знаходиться в B, а найдовший префікс A, знайдений у B, - це"b". Видаляємо цей префікс з A і додаємо його сторнування (яке досі"b") до A '.A = "ab": Перший символ"a"знаходиться в B, а найдовший префікс A, знайдений у B, - це"ab". Видаляємо цей префікс з A і додаємо його сторнування"ba"до A '.A = "": А порожній, тому ми зупиняємось.
Таким чином ми отримуємо A' = "cba" + " " + "b" + "ba" = "cba bba". Для B 'процес подібний:
B = "abdabc" -> "a" in A, remove prefix "ab"
B = "dabc" -> "d" not in A, remove "d"
B = "abc" -> "a" in A, remove prefix "abc"
Таким чином ми отримуємо B' = "ba" + "d" + "cba" = "badcba".
Нарешті повертаємо дві струни, тобто
(A', B') = ("cba bba", "badcba")
Тестові справи
"abc bab", "abdabc" -> "cba bba", "badcba"
"abcde", "abcd bcde" -> "dcbae", "dcba edcb"
"hello test", "test banana" -> "hello tset", "tset banana"
"birds flying high", "whistling high nerds" -> "bisdr flyhgih gni", "wihstlhgih gni nesdr"
Виграє найкоротший код у байтах.
"cba bba", "badcba"включення лапок і комах?