public class Main {
public static String solution(String dna_sequence) {
// 将原序列复制一份并拼接在原序列后面,形成一个新的序列
String doubleSequence = dna_sequence + dna_sequence;
// 初始化最小表示的起始位置为0
int minStart = 0;
// 遍历每一个可能的起始位置
for (int i = 1; i < dna_sequence.length(); i++) {
// 比较当前最小表示和当前起始位置的序列
if (doubleSequence.substring(minStart, minStart + dna_sequence.length()).compareTo(doubleSequence.substring(i, i + dna_sequence.length())) > 0) {
// 如果当前起始位置的序列字典序更小,则更新最小表示的起始位置
minStart = i;
}
}
// 返回最小表示
return doubleSequence.substring(minStart, minStart + dna_sequence.length());
}
public static void main(String[] args) {
// 测试用例
System.out.println(solution("ATCA").equals("AATC"));
System.out.println(solution("CGAGTC").equals("AGTCCG"));
System.out.println(solution("TCATGGAGTGCTCCTGGAGGCTGAGTCCATCTCCAGTAG").equals("AGGCTGAGTCCATCTCCAGTAGTCATGGAGTGCTCCTGG"));
}
}
环状DNA序列的最小表示法
最新推荐文章于 2025-06-05 14:36:46 发布