Objetivos
- Manejo de cadenas
- Bucles o iteraciones
Enunciado del problema
Eres un biólogo que examina secuencias de ADN de formas de vida diferentes. Se te darán dos secuencias de ADN, y el objetivo es encontrar el conjunto ordenado de bases adyacentes de mayor tamaño que es común en ambos ADNs.Las secuencias de ADN se darán como conjuntos ordenados de bases de nucleótidos: adenina (abreviado A), citosina (C), guanina (G) y timina (T):
Secuencia 1: ATGTCTTCCTCGA
Secuencia 2: TGCTTCCTATGAC
Para el ejemplo anterior, el resultado es CTTCCT porque que es el conjunto ordenado de bases adyacentes de mayor tamaño que se encuentra en ambas formas de vida.
Código completo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | public class JavaBiologo { /** * @param args the command line arguments */ public static void main(String[] args) { //variable que almacena la primera secuencia de adn String adn1 = "ATGTCTTCCTCGA"; //variable que almacena la segunda secuencia de adn String adn2 = "TGCTTCCTATGAC"; //variable que almacena el resultado. El conjunto ordenado de bases //adyacentes de mayor tamaño que es común en amba secuencias String bases = ""; //Utilizamos dos iteraciones for para realizar la búsqueda. El enfoque //que utilizaremos es encontrar la mayor cadena en la variable adn1 //que tambien se encuentra en la variable adn2 //el primer for irá acotando de derecha a izquierda el rango de búsqueda //el contador comienza en el valor de la longitud de la variable adn1 //va disminuyendo for (int r = adn1.length(); r >= 0; r--) { //el segundo for irá acotando de izquierda a derecha el rango //de búsqueda. El contador comienza en cero y se va incrementando //sin llegar a ser igual que el valor actual de la variable r //que viene acotando por la derecha for (int l = 0; l < r; l++) { //aquí verificamos dos condiciones: //1. que la porción de la cadena extraida de la variable adn1 //se encuentra en la variable adn2 if (adn2.contains(adn1.substring(l, r)) && //2. que la longitud de la ultima coincidencia encontrada //sea menor a la longitud de la nueva coincidencia encontrada bases.length() < adn1.substring(l, r).length()) { //si se cumplen ambas condiciones almacenamos el nuevo valor bases = adn1.substring(l, r); } } } //finalmente imprimimos el resultado en pantalla System.out.println(bases); } } |
Comentarios
Publicar un comentario