Wie Sie vielleicht wissen, gibt es in der DNA vier Basen - Adenin ( A), Cytosin ( C), Guanin ( G) und Thymin ( T). Typischerweise Abindet Tund Cbindet mit Gund bildet die "Sprossen" der DNA-Doppelhelixstruktur .
Wir definieren das Komplement einer Basis als die Basis, an die sie bindet - dh das Komplement von Ais T, das Komplement von Tis A, das Komplement von Cis Gund das Komplement von Gis 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 GATATCis 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 GATATCalso CTATAGrü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 ACGTin 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 GGATCCist selbst ( GGATCC --complement--> CCTAGG --reverse--> GGATCC), ebenso GGATCCwie ein umgekehrtes Palindrom. GATCist 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.