ayuda Backward Oracle Matching
ayuda, lo que pasa es que no encuentro la solucion a una ecepcion que me marca cuando ingreso espacios en blanco en el texto de entrada, aunque el patron que busco no lleve espacios en blanco me marca error, curiosamente a veces me da los resultados pero me marca otro error al finalizar al ejecucion, aqui les dejo el codigo y espero me puedan ayudar :S
import javax.swing.JOptionPane;
public class BOM{
static int teta = 1000;//teta
static int k = teta;
static int s = teta;
static int pos = 0;//posicion del inicio del patron dentro del texto de entrada
static int current = 0;//ocurrencia del patron en el texto de entrada
public static void main(String[] args){
String texto = JOptionPane.showInputDialog(null, "Ingrese el Texto de Entrada", "BOM", 1);//"AGATACGATATATAC";//input text
String patron = JOptionPane.showInputDialog(null, "Ingrese el Patron a Buscar", "BOM", 1);//"ATATA";//Backward pattern
//mensaje
int n = texto.length();//tamano del texto de entrada
int m = patron.length();//tamano del patron
int lengthAscii = 255;//tamano del codigo ASCII usado solo como referencia de los posibles caracteres usados
int states[] = new int[m + 1];//
int transitions[][] = new int[m + 1][lengthAscii];//
//ciclo que crea los estados
for (int i = 0; i <= m ; i++){
states[i] = teta;
for (int j = 0; j < lengthAscii; j++){
transitions[i][j] = teta;
}
}
for (int j = 1; j <= m; j++){
oracle_add_letter(states, transitions, j - 1, patron.charAt(j - 1));
}
//searching
pos = 0;
while (pos <= n - m){
current = 0;
int j = m;
while(j > 0 && current != teta){
int textPos = Character.getNumericValue(texto.charAt(pos + j));
current = transitions[current][textPos];
j = j - 1;
}
if(current != teta){//condicion que muestra los resultados de la busqueda del patron en el texto de entrada
System.out.println("El Patron Aparece en la Posicion: " + (pos + 1));
System.out.println("El Texto es de: " + n + " caracteres"
+ "\n" + "El Patron es de: " + m + " caracteres");
}
pos = pos + j + 1;
}
}
private static void oracle_add_letter(int[] states, int[][] transitions, int m, char sigma){
int sigmaNum = Character.getNumericValue(sigma);
transitions[m][sigmaNum] = m + 1;
k = states[m];
while (k != teta && transitions[k][sigmaNum] == teta){
transitions[k][sigmaNum] = m + 1;
k = states[k];
}
if (k == teta) s = 0;
else s = transitions[k][sigmaNum];
states[m + 1] = s;
}
}
- Inicie sesión o regístrese para enviar comentarios
Comentarios recientes
hace 9 semanas 2 horas
hace 10 semanas 1 día
hace 16 semanas 6 días
hace 1 año 9 semanas
hace 2 años 21 semanas
hace 2 años 25 semanas
hace 2 años 32 semanas
hace 2 años 41 semanas
hace 2 años 43 semanas
hace 2 años 45 semanas