Учитывая три строки A, B и C. Напишите функцию, которая проверяет, является ли C чередованием A и B. C называется чередованием A и B, если он содержит все символы A и B и порядок всех символы в отдельных строках сохраняются.
Например:
- "hotdog" - это чередование "горячих" и "собачьих" (простых)
- 'superb' - это чередование 'up' и 'serb'
- "сердечная боль" - это чередование "уха" и "болей".
- "chat" - это чередование "шляпы" и "кошки"
- 'cheaters' не является чередованием "чата" и "провидца", потому что, хотя в нем содержатся все буквы от каждого, буквы из "провидца" не отображаются в порядке
Я нахожу некоторые решения в net, но ниже мой подход может кто-нибудь сказать мне, что я что-то упустил или мой алгоритм будет работать?.
Мое Алго:
- Пройдите через
a
иc
. Во время обхода мы сначала вычисляем две вещи: присутствует ли char или нет и сохраняет индекс i.e.f
, где найден char. И как только мы найдем char, в этом месте мы должны поместить некоторые специальные char, чтобы мы не рассматривали этот char далее. - Для следующего char в
a
поиска вc
из индекса, где вы нашли предыдущий char i.e.f
. если мы не найдем возврата. - То же самое можно сделать и для
b
. - Если после выполнения вышеуказанного шага, если мы найдем
false
, чем повторить для первогоb
, чемa
и вернем результат.
например.
a = xxy, b = xxz and c = xxzxxxy
начните с:
- для x в a, c = 0xzxxxy (я помещаю 0 как специальный char)
- для x в a, начинаем с индекса 0 вперед (потому что мы нашли предыдущий char при 0) c = 00zxxxy.
- для y в a, c = 00zxxx0
- для x в b, c = 00z0xx0
- для x в b, c = 00z00x0
- для z в b, мы не смогли найти z после индекса 4, который был индексом, где мы нашли предыдущий char для b.
начиная с
a
, возвращает false, поэтому мы начнем с b.Итак, начните с b:
- для x в b, c = 0xzxxxy
- для x в b, c = 00zxxxy
- для z в b, c = 000xxxy
- для x в a, c = 0000xxy
- для x в a, c = 00000xy
- для y в a, c = 00000x0
следовательно, истина i.e.c является чередующейся строкой a и b.