dna序列最小值的寻找方法

58 阅读1分钟

为了找到环状DNA序列的最小表示,我们可以将序列视为一个环,然后从每个可能的起始位置开始,将序列顺时针旋转,生成所有可能的表示法。然后,我们只需要从这些表示法中找到字典序最小的那一个。

以下是完善后的代码:

java
public class Main {
    public static String solution(String dna_sequence) {
        // 找到所有可能的表示法,并找到字典序最小的一个
        String min_representation = dna_sequence;
        for (int i = 1; i < dna_sequence.length(); i++) {
            String rotated = dna_sequence.substring(i) + dna_sequence.substring(0, i);
            if (rotated.compareTo(min_representation) < 0) {
                min_representation = rotated;
            }
        }
        return min_representation;
    }

    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"));
    }
}

这段代码首先定义了 min_representation 变量来存储当前找到的最小表示法,初始值为输入的DNA序列。然后,它遍历序列的每个可能的起始位置,通过使用 substring 方法来旋转序列,并生成所有可能的表示法。如果新生成的表示法在字典序上小于当前的最小表示法,就更新 min_representation。最后,返回找到的最小表示法。

main 方法中,我们使用几个测试用例来验证 solution 方法的正确性。

复制再试一次分享