Напишите программу или функцию, которая, учитывая две строки 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"включая кавычки и запятую?