Problema Obtener sub-secuencias continuas de un numero


23 de Abril del 2020

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!


David Carrero
12 de Agosto del 2026

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