Como você deve saber, no DNA existem quatro bases - adenina ( A), citosina ( C), guanina ( G) e timina ( T). Tipicamente Aligações com Te Cligações com G, formando os "degraus" da estrutura de hélice dupla de ADN .
Definimos o complemento de uma base para ser a base à qual ele se liga - ou seja, o complemento de Aé T, o complemento de Té A, o complemento de Cé Ge o complemento de Gé C. Também podemos definir o complemento de uma sequência de DNA para ser a sequência com cada base complementada, por exemplo, o complemento de GATATCé CTATAG.
Por causa da estrutura do DNA de fita dupla, as bases em uma fita são complementares às bases na outra fita. No entanto, o DNA tem uma direção e a transcrição do DNA ocorre em direções opostas nas duas cadeias. Portanto, os biólogos moleculares costumam se interessar pelo complemento inverso de uma cadeia de DNA - literalmente, o inverso do complemento da cadeia.
Para estender nosso exemplo anterior, o complemento inverso de GATATCé CTATAGpara trás, então GATATC. Como você deve ter notado, neste exemplo o complemento reverso é igual à string original - chamamos essa string de palíndromo reverso . *
Dada uma sequência de DNA, você consegue encontrar a substring mais longa que é um palíndromo reverso?
* Uso o termo "palíndromo reverso", extraído de Rosalind , para diferenciar do significado usual de palíndromo.
Entrada
A entrada será uma única sequência que consiste apenas nos caracteres ACGTem maiúsculas. Você pode escrever uma função ou um programa completo para esse desafio.
Resultado
Você pode optar por imprimir via impressão ou retorno (a última opção está disponível apenas no caso de uma função).
Seu programa deve gerar a substring palindrômica reversa mais longa da sequência de entrada, se houver uma solução exclusiva. Se existirem várias soluções, você poderá produzir qualquer uma delas ou todas (sua escolha). As duplicatas são válidas se você optar por produzir todas elas.
A entrada é garantida para ter uma solução de pelo menos comprimento 2.
Exemplo trabalhado
ATGGATCCG -> GGATCC
O complemento reverso de GGATCCé ele próprio ( GGATCC --complement--> CCTAGG --reverse--> GGATCC), assim GGATCCcomo um palíndromo reverso. GATCtambém é um palíndromo reverso, mas não é o mais longo.
Casos de teste
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
Pontuação
Isso é código de golfe, então a solução com o menor número de bytes vence.