อย่างที่คุณอาจทราบในDNAมีสี่ฐานคือ adenine ( A
), cytosine ( C
), guanine ( G
) และ thymine ( T
) โดยปกติA
พันธบัตรT
และC
หุ้นกู้ที่มีG
รูป "ขั้นบันได" ของโครงสร้างดีเอ็นเอเกลียวคู่
เรากำหนดส่วนประกอบของฐานในการเป็นฐานมันพันธบัตร - คือส่วนเติมเต็มของA
เป็นT
ส่วนประกอบของการT
เป็นA
ส่วนประกอบของC
เป็นG
และส่วนประกอบของมีG
C
นอกจากนี้เรายังสามารถกำหนดส่วนประกอบของสตริงดีเอ็นเอที่จะเป็นสตริงที่มีฐานแต่ละครบครันเช่นส่วนประกอบของมีGATATC
CTATAG
เนื่องจากโครงสร้างที่มีการตีเกลียวเป็นสองเท่าของดีเอ็นเอฐานในหนึ่งสาระจึงประกอบกับฐานของอีกสายหนึ่ง อย่างไรก็ตาม DNA มีทิศทางและการถอดรหัส DNA เกิดขึ้นในทิศทางตรงกันข้ามกับสองเส้น ดังนั้นนักชีววิทยาโมเลกุลมักจะสนใจในส่วนเติมกลับของสาย DNA - ค่อนข้างกลับด้านของส่วนเติมเต็มของสายอักขระ
ที่จะขยายตัวอย่างก่อนหน้านี้ของเราที่สมบูรณ์กลับGATATC
เป็นไปข้างหลังเพื่อให้CTATAG
GATATC
ดังที่คุณอาจสังเกตเห็นในตัวอย่างนี้ส่วนประกอบย้อนกลับมีค่าเท่ากับสตริงเดิม - เราเรียกสตริงดังกล่าวว่าReverse palindrome *
เมื่อได้รับสาย DNA คุณสามารถค้นหา substring ที่ยาวที่สุดซึ่งเป็น palindrome แบบย้อนกลับได้หรือไม่?
* ฉันใช้คำว่า "reverse palindrome" ซึ่งนำมาจากRosalindเพื่อแยกความแตกต่างจากความหมายปกติของ palindrome
อินพุต
ข้อมูลที่ป้อนจะเป็นสตริงเดียวที่ประกอบด้วยอักขระตัวACGT
พิมพ์ใหญ่เท่านั้น คุณอาจจะเขียนฟังก์ชั่นหรือโปรแกรมเต็มรูปแบบสำหรับความท้าทายนี้
เอาท์พุต
คุณสามารถเลือกที่จะแสดงผลผ่านการพิมพ์หรือการส่งคืน (ตัวเลือกหลังจะใช้ได้เฉพาะในกรณีของฟังก์ชั่น)
โปรแกรมของคุณควรส่งสตริงย่อย palindromic reverse reverse ที่ยาวที่สุดของสายอักขระอินพุตหากมีโซลูชันเฉพาะ หากมีหลายวิธีคุณอาจส่งออกหนึ่งเดียวหรือทั้งหมด (ทางเลือกของคุณ) รายการซ้ำไม่เป็นไรหากคุณเลือกที่จะส่งออกทั้งหมด
อินพุตรับประกันว่าจะมีทางออกของความยาวอย่างน้อย 2
ทำงานตัวอย่าง
ATGGATCCG -> GGATCC
ส่วนประกอบที่ตรงกันข้ามของGGATCC
มันคือ ( GGATCC --complement--> CCTAGG --reverse--> GGATCC
) ดังนั้นจึงGGATCC
เป็นสิ่งที่ตรงกันข้าม GATC
ยังเป็น palindome แบบย้อนกลับ แต่ก็ไม่ได้ยาวที่สุด
กรณีทดสอบ
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
เกณฑ์การให้คะแนน
นี่คือโค้ดกอล์ฟดังนั้นการแก้ปัญหาในจำนวนไบต์น้อยที่สุดจะเป็นผู้ชนะ