Wie Sie vielleicht wissen, gibt es in der DNA vier Basen - Adenin ( A
), Cytosin ( C
), Guanin ( G
) und Thymin ( T
). Typischerweise A
bindet T
und C
bindet mit G
und bildet die "Sprossen" der DNA-Doppelhelixstruktur .
Wir definieren das Komplement einer Basis als die Basis, an die sie bindet - dh das Komplement von A
is T
, das Komplement von T
is A
, das Komplement von C
is G
und das Komplement von G
is C
. Wir können das Komplement eines DNA-Strings auch als den String definieren, bei dem jede Base komplementiert ist, z. B. das Komplement von GATATC
is CTATAG
.
Aufgrund der doppelsträngigen Struktur der DNA sind die Basen auf einem Strang komplementär zu den Basen auf dem anderen Strang. DNA hat jedoch eine Richtung und die DNA-Transkription erfolgt in entgegengesetzten Richtungen auf den beiden Strängen. Daher interessieren sich Molekularbiologen häufig für das umgekehrte Komplement eines DNA-Strings - im wahrsten Sinne des Wortes das Gegenteil des Komplements des Strings.
Um unser vorheriges Beispiel zu erweitern, ist das umgekehrte Komplement von GATATC
also CTATAG
rückwärts GATATC
. Wie Sie vielleicht bemerkt haben, entspricht in diesem Beispiel das umgekehrte Komplement der ursprünglichen Zeichenfolge - wir nennen eine solche Zeichenfolge ein umgekehrtes Palindrom . *
Können Sie bei einer DNA-Kette den längsten Teilstring finden, der ein umgekehrtes Palindrom ist?
* Ich verwende den Begriff "umgekehrtes Palindrom" aus Rosalind , um mich von der üblichen Bedeutung des Palindroms zu unterscheiden.
Eingang
Die Eingabe ist eine einzelne Zeichenfolge, die nur aus den Zeichen ACGT
in Großbuchstaben besteht. Sie können entweder eine Funktion oder ein vollständiges Programm für diese Herausforderung schreiben.
Ausgabe
Sie können die Ausgabe entweder über Drucken oder Zurückgeben wählen (letztere Option ist nur bei einer Funktion verfügbar).
Ihr Programm sollte den längsten umgekehrten palindromischen Teilstring der Eingabezeichenfolge ausgeben, wenn es eine eindeutige Lösung gibt. Wenn mehrere Lösungen vorhanden sind, können Sie entweder eine einzelne oder alle (nach Ihrer Wahl) ausgeben. Duplikate sind in Ordnung, wenn Sie alle ausgeben möchten.
Der Eingang hat garantiert eine Lösung von mindestens Länge 2.
Gearbeitetes Beispiel
ATGGATCCG -> GGATCC
Das umgekehrte Komplement von GGATCC
ist selbst ( GGATCC --complement--> CCTAGG --reverse--> GGATCC
), ebenso GGATCC
wie ein umgekehrtes Palindrom. GATC
ist auch ein umgekehrter Palindom, aber es ist nicht der längste.
Testfälle
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
Wertung
Dies ist Code Golf, daher gewinnt die Lösung in den wenigsten Bytes.