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

问题描述

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

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

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

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

输入描述

一段 DNA 碱基序列

输出描述

DNA 碱基序列的最小表示

备注 : n <= 100 DNA 由大写英文字母 A、G、C、T 组成

示例 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;
}
相关推荐
ZhengEnCi2 小时前
大模型的分类到底怎么分:从基础模型到推理模型、从通用到专用的完整图谱
算法
取名真是2 小时前
Python 算法知识点从基础到进阶
开发语言·python·算法
罗西的思考3 小时前
【轻量化复刻大模型 / KIMI K3】KDA 模块交互式演示
人工智能·算法·机器学习
nm_zfyjt5 小时前
信息流广告投放优化实践:线索成本评估模型与转化链路重构(家装建材案例)
算法·重构·内蒙古朋友圈广告服务商·内蒙古朋友圈获客
w_zero_one6 小时前
算法--构造
java·数据结构·算法
其实防守也摸鱼7 小时前
信创安全竞赛知识总结与题库
大数据·网络·人工智能·算法·安全·php
小超人诞生日记8 小时前
C++ 智能指针的使用及其原理详解
c++·算法
AiNightVision11 小时前
无人机夜视模块如何选择?——从参数指标到系统集成的完整选型指南
人工智能·算法·计算机视觉·车载系统·无人机·视频·智能硬件
牧羊人.33312 小时前
卷积神经网络之VGG
人工智能·深度学习·神经网络·算法·cnn