Seperti yang Anda ketahui, dalam DNA ada empat basa - adenin ( A
), sitosin ( C
), guanin ( G
) dan timin ( T
). Biasanya A
ikatan dengan T
dan C
ikatan dengan G
, membentuk "anak tangga" dari struktur heliks ganda DNA .
Kami mendefinisikan komplemen dari basis sebagai basis yang terikat - yaitu komplemen A
is T
, komplemen T
is A
, komplemen C
is G
dan komplemen G
is C
. Kita juga dapat mendefinisikan komplemen dari string DNA menjadi string dengan masing-masing basis dilengkapi, misalnya komplemen dari GATATC
is CTATAG
.
Karena struktur DNA beruntai ganda, basa pada satu untai saling melengkapi dengan basa pada untai lainnya. Namun DNA memiliki arah, dan transkripsi DNA terjadi dalam arah yang berlawanan pada kedua untaian. Oleh karena itu, para ahli biologi molekuler sering tertarik pada komplemen terbalik dari string DNA - secara harfiah kebalikan dari komplemen string.
Untuk memperpanjang contoh sebelumnya, komplemen kebalikan dari GATATC
yang CTATAG
mundur, jadi GATATC
. Seperti yang mungkin telah Anda perhatikan, dalam contoh ini komplemen balik sama dengan string asli - kami menyebut string semacam itu sebagai palindrom terbalik . *
Diberikan string DNA, dapatkah Anda menemukan substring terpanjang yang merupakan palindrom terbalik?
* Saya menggunakan istilah "reverse palindrome", diambil dari Rosalind , untuk membedakan dari arti palindrome yang biasa.
Memasukkan
Input akan berupa string tunggal yang hanya terdiri dari karakter ACGT
dalam huruf besar. Anda dapat menulis fungsi atau program lengkap untuk tantangan ini.
Keluaran
Anda dapat memilih untuk mencetak melalui pencetakan atau pengembalian (pilihan terakhir hanya tersedia jika fungsi).
Program Anda harus menampilkan substring palindromik mundur terpanjang dari string input, jika ada solusi yang unik. Jika ada beberapa solusi, maka Anda dapat mengeluarkan salah satu dari mereka, atau semuanya (pilihan Anda). Duplikat baik-baik saja jika Anda memilih untuk mengeluarkan semuanya.
Input dijamin memiliki solusi setidaknya panjang 2.
Contoh yang berhasil
ATGGATCCG -> GGATCC
Pelengkap terbalik dari GGATCC
itu sendiri ( GGATCC --complement--> CCTAGG --reverse--> GGATCC
), jadi GGATCC
adalah palindrom terbalik. GATC
juga merupakan palindome terbalik, tetapi bukan yang terpanjang.
Uji kasus
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
Mencetak gol
Ini adalah kode golf, sehingga solusi dalam byte paling sedikit menang.