Как вы, наверное, знаете, в ДНК есть четыре основания - аденин ( A), цитозин ( C), гуанин ( G) и тимин ( T). Обычно Aсвязывается Tи Cсвязывается G, образуя «ступеньки» структуры двойной спирали ДНК .
Мы определяем дополнение базы как базу, с которой она связана - то есть дополнение Aесть T, дополнение Tесть A, дополнение Cесть Gи дополнение Gесть C. Мы также можем определить комплемент ДНК-строки как строку с каждым дополненным основанием, например, комплемент GATATCis 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
счет
Это код гольф, поэтому решение в наименьшем количестве байтов выигрывает.