Oi, gente. Estou começando agora a usar o Java e precisava de ajuda para conseguir escrever meu raciocínio.
Eu quero fazer um programa que encontre um padrão dentro de um texto, possibilitando no máximo “d” diferenças entre eles e retorne a posição em que a igualdade se encontra no texto. Acho que o nome desse método é BLAST(Basic Local Alignment Search Tool).
Por exemplo:
Texto T="A T G A T A T T T G T C G G C A T T A C"
Padrão P="A T A T"
Para d=0, ele retornaria: 3
Para d=1, ele retornaria: 5 (+ os valores de d=0)
Para d=2, ele retornaria: 0, 1, 7, 13 e 15 (+ os valores de d=1 e d=0)
A minha ideia era percorrer as strins, e quando ele encontrasse uma igualdade, ele passasse pra string ao lado. Se a do lado também fosse igual, ele passa pra letra seguinte e assim por diante, ate ele chegar ao final de P, retornando a posição da igualdade.
Se as letras forem diferentes, ele diminui o valor de “d”, até chegar a 0.
Eu não sei como posso escrever essa ideia. Eu não sei como devo colocar o return para ele indicar a posição certa, mas o que eu consegui fazer ficou assim:
public static void main(String[] args){
String cadeiaDNA="ATGATATTTGTCGGCATTAC";
String P="ATAT";
int d=1;
int x = BuscaPadrao(cadeiaDNA,P,d);
System.out.println(x);
}
static int BuscaPadrao ( String cadeiaDNA, String P, int d ){
int s;
while (d>=0){
for (int i=0; i< cadeiaDNA.length(); ){
for (int j=0; j< P.length();j++){
String letraP=String.valueOf(P.charAt(j));
String letraDNA=String.valueOf(cadeiaDNA.charAt(i));
if (letraP.equals(letraDNA)){
i++;
s=i;
}
else {
d--;
i++;
}
}
}
}
return s;
}
Se alguém puder me ajudar, eu agradeço.
Valeu.