Rosalind编程问题之检索限制性位点。
Locating Restriction SitesProblem:
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();
}
}



