青训营 X 豆包MarsCode 技术训练营-16. 环状DNA序列整理

问题描述

环状 DNA 又称超螺旋,即一段碱基序列呈现环状,在分析时,需要将相同序列的环状 DNA 分到相同组内,现需将环状碱基序列按照最小表示法进行排序。

一段长度为 n 的碱基序列,按照顺时针方向,碱基序列可以从任意位置起开始该序列顺序,因此长度为 n 的碱基序列有 n 种表示法。例如:长度为 6 的碱基序列 CGAGTC,有 CGAGTCGAGTCCAGTCCG 等表示法。在这些表示法中,字典序最小的称为"最小表示"。

输入一个长度为 nn <= 100)的环状碱基序列(只包含 ACGT 这 4 种碱基)的一种表示法,输出该环状碱基序列的最小表示。

例如: ATCA 的最小表示是 AATC CGAGTC 的最小表示是 AGTCCG

输入描述

一段 DNA 碱基序列

输出描述

DNA 碱基序列的最小表示

备注n <= 100 DNA 由大写英文字母 AGCT 组成

示例 1 输入:ATCA 输出:AATC

示例 2 输入:CGAGTC 输出:AGTCCG

c 复制代码
#include <iostream>
#include <string>

std::string solution(std::string dna_sequence) {
    int len = dna_sequence.length();
    std::string min = dna_sequence;

    dna_sequence = dna_sequence + dna_sequence;

    for(int i = 1; i < len; i ++){
        std::string tmp = dna_sequence.substr(i, len);
        if(tmp < min) min = tmp;
    }
    return min;
}

int main() {
    // You can add more test cases here
    std::cout << (solution("ATCA") == "AATC") << std::endl;
    std::cout << (solution("CGAGTC") == "AGTCCG") << std::endl;
    std::cout << (solution("TCATGGAGTGCTCCTGGAGGCTGAGTCCATCTCCAGTAG") == "AGGCTGAGTCCATCTCCAGTAGTCATGGAGTGCTCCTGG") << std::endl;
    return 0;
}
相关推荐
HAPPY酷2 分钟前
Python高级架构师之路——从原理到实战
java·python·算法
枫叶林FYL16 分钟前
第9章 因果推理与物理理解
人工智能·算法·机器学习
小白zlm35 分钟前
预畸变双线性变换
单片机·嵌入式硬件·算法·电机控制
wuweijianlove1 小时前
算法复杂度估算的实验建模与可视化表达的技术6
算法
执笔画流年呀1 小时前
7大排序算法
java·算法·排序算法
AI成长日志1 小时前
【算法学习专栏】动态规划基础·中等两题精讲(198.打家劫舍、322.零钱兑换)
学习·算法·动态规划
计算机安禾1 小时前
【数据结构与算法】第28篇:平衡二叉树(AVL树)
开发语言·数据结构·数据库·线性代数·算法·矩阵·visual studio
测试_AI_一辰1 小时前
AI 如何参与 Playwright 自动化维护:一次自动修复闭环实践
人工智能·算法·ai·自动化·ai编程
未来之窗软件服务2 小时前
算法设计—计算机等级考试—软件设计师考前备忘录—东方仙盟
算法·软件设计师·计算机等级考试
未来之窗软件服务2 小时前
哈夫曼树构造—计算机等级考试—软件设计师考前备忘录—东方仙盟
算法·软件设计师·计算机等级考试·仙盟创梦ide·东方仙盟