脱氧核糖核酸即常说的DNA,是一类带有遗传信息的生物大分子。它由4种主要的脱氧核苷酸(dAMP、dGMP、dCMT和dTMP)通过磷酸二酯键连接而成。这4种核苷酸可以分别记为:A、G、C、T。

    DNA携带的遗传信息可以用形如:AGGTCGACTCCA.... 的串来表示。DNA在转录复制的过程中可能会发生随机的偏差,这才最终造就了生物的多样性。

    为了简化问题,我们假设,DNA在复制的时候可能出现的偏差是(理论上,对每个碱基被复制时,都可能出现偏差):

  1. 漏掉某个脱氧核苷酸。例如把 AGGT 复制成为:AGT

    2. 错码,例如把 AGGT 复制成了:AGCT

    3. 重码,例如把 AGGT 复制成了:AAGGT


    如果某DNA串a,最少要经过 n 次出错,才能变为DNA串b,则称这两个DNA串的距离为 n。

    例如:AGGTCATATTCC 与 CGGTCATATTC 的距离为 2

    你的任务是:编写程序,找到两个DNA串的距离。


【输入、输出格式要求】

    用户先输入整数n(n<100),表示接下来有2n行数据。

    接下来输入的2n行每2行表示一组要比对的DNA。(每行数据长度<10000)

    程序则输出n行,表示这n组DNA的距离。

    例如:用户输入:
3
AGCTAAGGCCTT
AGCTAAGGCCT
AGCTAAGGCCTT
AGGCTAAGGCCTT
AGCTAAGGCCTT
AGCTTAAGGCTT

    则程序应输出:
1
1
2

结题思路:参阅百度百科http://baike.baidu.com/view/2020247.htm
代码如下:

import java.util.*;


public class Main {
    
    
    
static String instr0;
    
static String instr1;
    
public static void main(String[] args)
    
{
        Scanner sc 
= new Scanner(System.in);
        
int N = sc.nextInt();
        sc.nextLine();
        
for(int ii = 0; ii < N; ii++){
            instr0 
= sc.nextLine();
            instr1 
= sc.nextLine();
            
int rs = pro();
            System.out.println(rs);
        }

        
    }

    
static int pro(){
        
int[][] dis = new int[instr0.length()][instr1.length()];
        
for(int i = 0; i < instr0.length(); i++)
            dis[i][
0= i;
        
for(int j = 0; j < instr1.length(); j++)
            dis[
0][j] = j;
        
for(int i = 1; i < instr0.length(); i++){
            
for(int j = 1; j < instr1.length(); j++){
                
int cost = 0;
                
if(instr0.charAt(i) != instr1.charAt(j))
                    cost 
= 1;
                dis[i][j] 
= min3(dis[i - 1][j] + 1, dis[i][j - 1+ 1
                        dis[i 
- 1][j - 1+ cost);
            }

        }

        
return dis[instr0.length() - 1][instr1.length() - 1];
        
    }

    
static int min3(int a, int b, int c){
        
return Math.min(Math.min(a, b), c);
    }


    
}


 

posted on 2013-07-09 19:26 小鼠标 阅读(390) 评论(0)  编辑 收藏 引用 所属分类: Java基础练习

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2012年8月>
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678

常用链接

随笔分类(111)

随笔档案(127)

friends

最新评论

  • 1. re: 线段树
  • 是这个样子的,所以在OJ有时候“卡住”了也不要太灰心,没准真的不是自己的原因呢。
    加油,祝你好运啦!
  • --小鼠标
  • 2. re: 线段树
  • 对于编程竞赛来说,Java所需时间一般为C/C++的两倍。合理的竞赛给Java的时间限制是给C/C++的两倍。
  • --伤心的笔
  • 3. re: poj1273--网络流
  • 过来看看你。
  • --achiberx
  • 4. re: (转)ubuntu11.10无法启动无线网络的解决方法
  • 膜拜大神。。查了一个下午资料终于在这里解决了问题。。神牛说的区域赛难道是ACM区域赛。。?
  • --Hang
  • 5. re: 快速排序、线性时间选择
  • 博主,谢谢你的文章。你的方法可以很好的处理分区基准在数组中重复的情况,书上的方法遇到这种输入会堆栈溢出。书上给出了解释但给的方法貌似不简洁。
  • --lsxqw2004

阅读排行榜