栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Rosalind Java|Locating Restriction Sites

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Rosalind Java|Locating Restriction Sites

Rosalind编程问题之检索限制性位点。

Locating Restriction Sites

Problem:
A DNA string is a reverse palindrome if it is equal to its reverse complement. For instance, GCATGC is a reverse palindrome because its reverse complement is GCATGC. See Figure 2.

Given: A DNA string of length at most 1 kbp in FASTA format.
Sample input:

Rosalind_24
TCAATGCATGCGGGTCTATATGCAT

Return: The position and length of every reverse palindrome in the string having length between 4 and 12. You may return these pairs in any order.
Sample output:

4 6
5 4
6 6
7 4
17 4
18 4
20 6
21 4


本道题给出我们一条核酸序列,需要我们找到其中限制性位点的位置和长度。所谓限制性位点片段,其序列和其自身的反向互补序列是一样的, 遗传学上也叫作回文序列,是限制性内切酶酶切位点,与DNA的转录和终止有关。

我们需要首先得到DNA的反向互补序列,详情可以参考这篇:Rosalind Java| Complementing a Strand of DNA, 这里直接套用代码。然后利用equal方法判断其是否与自身相等。

下面是实现代码:

public class Locating_Restriction_Sites {
    public static void main(String[] args) {
        //1.输入核酸序列
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入核酸序列:");
        String DNA = sc.nextLine();

        //2.定义滑框起点i和滑框长度j以获取反向互补序列并做比较
        for (int i = 0; i <= DNA.length() - 4; i++) {
            for (int j = 4; j <= 12 && j <= DNA.length() - i; j++) {
                String window = DNA.substring(i, i + j);
                if (window.equals(CompleDNA(reverse(window)))) {
                    System.out.println((i + 1) + " " + j);
                }
            }
        }
    }

    //通过遍历字符串获取反向核酸序列
    public static String reverse(String s) {
        String ss = "";
        for (int i = s.length() - 1; i >= 0; i--) {
            ss += s.charAt(i);
        }
        return ss;
    }

    //碱基替换为互补序列:采用条件判断+碱基累加的方式
    public static String CompleDNA(String s) {
        //新建StringBuilder类数据以存储替换后的碱基
        StringBuilder arr = new StringBuilder();
        for (int i = 0; i < s.length(); i++) {
            switch (s.charAt(i)) {
                //括号中的输出类型为char类型,匹配后面的字符时需要将字符加单引号可匹配。
                case 'A':
                    arr.append('T');
                    break;
                case 'C':
                    arr.append('G');
                    break;
                case 'G':
                    arr.append('C');
                    break;
                case 'T':
                    arr.append('A');
                    break;
                default:
                    System.out.println("第" + (i + 1) + "位不是ACTG");
                    break;
            }
        }
        return arr.toString();
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/924907.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号