Як ви знаєте, у ДНК є чотири основи - аденін ( A
), цитозин ( C
), гуанін ( G
) та тимін ( T
). Зазвичай A
зв'язки з T
і C
зв'язки з G
, утворюючи "перегони" структури подвійної спіралі ДНК .
Ми визначаємо, що доповнення бази є базовим, до якого вона пов'язується - тобто доповненням A
є T
, доповненням T
є A
, доповненням C
є G
і доповненням G
є C
. Ми також можемо визначити комплемент рядка ДНК, який буде рядком з кожною базою, доповненою, наприклад, доповненням GATATC
є CTATAG
.
Через дволанцюжкову структуру ДНК бази на одній ланцюгу є взаємодоповнюючими основами на іншій ланцюзі. Однак ДНК має напрямок, і транскрипція ДНК відбувається в протилежних напрямках на двох нитках. Звідси молекулярних біологів часто цікавить зворотний доповнення ланцюга ДНК - цілком буквально зворотний склад комплементу струни.
Для того, щоб розширити наш попередній приклад, зворотне доповненням GATATC
є в CTATAG
зворотному напрямку, так GATATC
. Як ви, можливо, ви помітили, у цьому прикладі зворотний доповнення дорівнює початковому рядку - такий рядок ми називаємо зворотним паліндром . *
Враховуючи рядок ДНК, чи можете ви знайти найдовшу підрядок, який є зворотним паліндром?
* Я використовую термін "зворотний паліндром", узятий від Розалінд , для відмежування від звичайного значення паліндром.
Вхідні дані
Введенням буде одна рядок, що складається лише з символів ACGT
у верхньому регістрі. Ви можете написати або функцію, або повну програму для цього завдання.
Вихідні дані
Ви можете вибрати для друку або повернення (останній вибір доступний лише у випадку функції).
Ваша програма повинна вивести найдовшу зворотну паліндромну підрядку вхідного рядка, якщо є унікальне рішення. Якщо існує кілька рішень, ви можете вивести будь-яке одне з них, або всі (на ваш вибір). Дублікати добре, якщо ви вирішите вивести їх усі.
Гарантія має рішення, що має принаймні довжину 2.
Працював приклад
ATGGATCCG -> GGATCC
Зворотний доповнення GGATCC
сам по собі ( GGATCC --complement--> CCTAGG --reverse--> GGATCC
), так само GGATCC
є і зворотним паліндром. GATC
також є зворотним паліндомом, але він не найдовший.
Тестові справи
AT -> AT
CGT -> CG
AGCA -> GC
GATTACA -> AT, TA
ATGGATCCG -> GGATCC
CCCCCGGGGG -> CCCCCGGGGG
ACATATATAGACT -> ATATAT, TATATA
ATTCGATCTATGTAAAGAGG -> TCGA, GATC
CGCACGTCTACGTACCTACGTAG -> CTACGTAG
TCAATGCATGCGGGTCTATATGCAT -> ATGCAT, GCATGC [, ATGCAT]
CGCTGAACTTTGCCCGTTGGTAGAACGGACTGATGTGAACGAGTGACCCG -> CG, GC, TA, AT [, GC, CG, CG, CG, CG]
CTCGCGTTTGCATAACCGTACGGGCGGAACAGTCGGCGGTGCCTCCCAGG -> CCGTACGG
Оцінка балів
Це кодовий гольф, тому рішення в найменших байтах виграє.