У цьому завданні ваше завдання - знайти підрядки з заданою структурою.
Вхідні дані
Вхідними даними повинні бути два непусті буквено-цифрові рядки, візерунок p
та текст t
. Ідея полягає в тому, що кожен символ p
являє собою суміжну не порожню підрядку, t
яка виникає поруч, і p
являє собою їх конкатенацію. Ідентичні символи відповідають однаковим підрядкам; Наприклад, шаблон aa
представляє будь непорожній квадрат (рядок , отриману шляхом конкатенації коротшу рядок до себе). Таким чином, візерунок aa
може відповідати підрядку byebye
з кожним a
узгодженням bye
.
Вихідні дані
Якщо текст t
містить підрядку, яка p
збігається, то вашим висновком буде ця підрядка з двокрапками, :
вставленими між рядками, що відповідають символам p
. Наприклад, якщо ми маємо t = byebyenow
і p = aa
, то bye:bye
є прийнятним виходом. Можливо, буде кілька варіантів відповідного підрядка, але виведете лише один із них.
Якщо t
не містить збігової підрядки, у вашому виході буде сумне обличчя :(
.
Правила та уточнення
Різні символи p
можуть відповідати однаковим підрядкам, тому вони p = aba
можуть відповідати рядку AAA
. Зауважте, що символи повинні відповідати не порожнім рядкам; зокрема, якщо p
довше, ніж t
вихід, повинен бути вихідний :(
.
Ви можете написати повну програму або функцію, а також можете змінити порядок двох входів. Виграє найменший кількість байтів, а стандартні лазівки заборонені.
Випробування
Дано у форматі pattern text -> output
. Зауважте, що можуть існувати й інші прийнятні результати.
a Not -> N
aa Not -> :(
abcd Not -> :(
aaa rerere -> re:re:re
xx ABAAAB -> A:A
MMM ABABBAABBAABBA -> ABBA:ABBA:ABBA
x33x 10100110011001 -> 10:1001:1001:10
abcacb 0a00cca0aa0cc0ca0aa0c00c0aaa0c -> c:a0aa:0c:c:0c:a0aa
abccab 0a00cca0aa0cc0ca0aa0c00c0aaa0c -> a:a:0c0:0c0:a:a
abcbcab 0a00cca0aa0cc0ca0aa0c00c0aaa0c -> :(
abcbdcab 0a00cca0aa0cc0ca0aa0c00c0aaa0c -> 00:c:ca0aa0c:c:0:ca0aa0c:00:c
O(2^((n * (n + 1))/2))
: P