编辑距离

编辑距离

    脱氧核糖核酸即常说的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);
    }


    
}


 

你可能感兴趣的:(编辑距离)