Hola, necesito un código que dado un determinado numero genere todas las posibles sub-secuencias continuas en orden
Por ejemplo:
Numero: 49142
Sub-secuencias validas: "491", "914", "142", "4914", "9142"
Ya de 6 dígitos no seria posible generar ninguna y esto se tiene que validar
Agradezco cualquier idea que me puedan dar
Gracias!
Hola,
Con dos bucles anidados lo resuelves: uno recorre las longitudes posibles (de 3 hasta la longitud total menos uno, según tu propio ejemplo) y el otro recorre las posiciones de inicio para cada longitud:
public List<String> subsecuencias(String numero) {
List<String> resultado = new ArrayList<>();
int n = numero.length();
for (int longitud = 3; longitud < n; longitud++) {
for (int i = 0; i + longitud <= n; i++) {
resultado.add(numero.substring(i, i + longitud));
}
}
return resultado;
}
Compruébalo con tu propio ejemplo: para "49142" (5 dígitos, n=5), el bucle de longitud va de 3 a 4 (se detiene antes de llegar a n, por eso no incluye el número completo de 5 dígitos):
longitud=3: i puede ser 0, 1, 2 → «491», «914», «142»
longitud=4: i puede ser 0, 1 → «4914», «9142»
Resultado exacto: 491, 914, 142, 4914, 9142, tal cual tu ejemplo.
Sobre lo de que con 6 dígitos «ya no sería posible generar ninguna»: matemáticamente, con este mismo algoritmo, un número de 6 dígitos sí generaría subsecuencias válidas de longitud 3, 4 y 5 sin ningún problema. Si tu enunciado exige que se rechacen los números de 6 o más dígitos por completo, esa es una regla de validación aparte, no algo que salga del algoritmo en sí: simplemente añade una comprobación al principio (if (numero.length() > 5) return resultado; devolviendo la lista vacía) antes de entrar en los bucles.
David Carrero