Existe una solución [matemática] O (n) [/ matemática] para este problema, donde [matemática] n [/ matemática] es la longitud de la cadena que utiliza programación dinámica.
Deje [math] x_i [/ math] ser la subcadena más larga que termina en el índice [math] i [/ math] sin repetición de letras.
Mientras se propaga del índice [math] i-1 [/ math] a [math] i [/ math], debemos verificar si el carácter [math] s_i [/ math] existe en [math] x_ {i-1} [/mates]. Para esto, almacenaremos los índices de apariencia de cada letra. Si [math] s_i [/ math] existe en [math] x_ {i-1} [/ math], [math] x_i [/ math] comenzará desde el índice justo después de aparecer [math] s_i [/ math] en [matemáticas] x_ {i-1} [/ matemáticas]. Si [math] s_i [/ math] no existe en [math] x_ {i-1} [/ math], simplemente podemos extender [math] x_ {i-1} [/ math] a [math] x_ {i} [/ matemáticas].
- ¿Cuál es un buen enfoque para resolver este problema Problema - 118D - Codeforces?
- Como principiante, ¿debo invertir mi tiempo en escribir mi propio algoritmo de aprendizaje automático desde cero?
- ¿Puede crear un puntero 2D dinámico que almacene elementos ingresados por el usuario como una matriz y lo muestre antes y después de liberarlo?
- Cómo dibujar un contorno vectorial en una matriz de cuadrícula binaria
- ¿Cómo funciona el algoritmo OKCupid?
[matemática] dp [i] = 1 + dp [i-1] [/ matemática], si [matemática] s [i] [/ matemática] no se encuentra en [matemática] s [i-dp [i-1] : i-1] [/ math] donde [math] s [l: r] [/ math] es una subcadena de [math] s [/ math] del índice [math] l [/ math] al index [math] r [/ matemáticas] (ambos incluidos)
[math] dp [i] = ip [/ math], de lo contrario, donde [math] p [/ math] es el índice más grande menor que [math] i [/ math] tal que [math] s [p] = s [i] [/ matemáticas]