¿Cómo podemos lograr O (nlogn) / O (n) para ThePalindrome (Topcoder SRM 427)?

Deje que la longitud de la cadena original sea N. Suponga que la solución óptima nos tiene agregando caracteres M para convertirla en un palíndromo. Entonces, los primeros M caracteres de la cadena original serían idénticos a los M caracteres agregados al revés. Además, los últimos caracteres NM de la cadena original tendrían que ser un palíndromo.

Por lo tanto, el problema es equivalente a encontrar el sufijo más largo de la cadena original que es un palíndromo. Esto se puede hacer fácilmente mediante hash. Para obtener una descripción de cómo se realiza el hash, eche un vistazo a la descripción del algoritmo Rabin-Karp en el tutorial de Topcoder. Si el hash del sufijo es igual al hash de su reverso, es un palíndromo. Dado que se puede agregar un carácter al hash en el tiempo O (1), se puede verificar la palindromidad de todos los sufijos en el tiempo O (N).

Alternativamente, puede usar el algoritmo KMP para comparar entre la cadena original y la cadena invertida. Encuentra el prefijo más largo de la cadena invertida que es idéntico a un sufijo de la cadena original. Este es el sufijo palíndromo más largo de la cadena. Este enfoque es O (N) también.

More Interesting

Cómo insertar un conjunto de números en un árbol AVL vacío para que no se requiera rotación

¿Qué consejo le da Ashish Kedia al estudiante de ingeniería de software de último año que no es un buen programador para convertirse en un gran ingeniero? Aprobé las asignaturas, pero no tomé ninguna clase de algo, y mis habilidades para resolver problemas son bajas.

¿Cuáles son las ventajas y desventajas de los algoritmos y la heurística en la resolución de problemas?

¿Qué son los algoritmos y la estructura de datos y cómo puedo comenzar con ellos?

¿Cómo se copia el contenido de un árbol de búsqueda binario que tiene emparejamientos K, V?

¿Podemos construir un sistema utilizando algoritmos de aprendizaje automático que puedan reemplazar a todas las empresas de consultoría financiera y técnica del mundo?

¿Cuáles son los algoritmos de geometría computacional que aparecen en los concursos de programación? ¿Cuál de ellos es más frecuente que los demás? ¿Qué estructuras de datos geométricos aparecen en los concursos de programación?

¿Cuál es la mejor manera de saber qué estrategia (codiciosa, dividir y conquistar, programación dinámica) funcionaría mejor para un problema de algoritmo en particular?

¿Qué es el algoritmo? ¿Para qué sirve?

¿La programación a nivel del sistema se ha vuelto obsoleta?

Cómo encontrar un elemento en un árbol de búsqueda binario

¿Es la programación una superpotencia? ¿Por qué o por qué no?

Cuando se ejecuta el ordenamiento rápido aleatorio, ¿cuántas llamadas se realizan al generador de números aleatorios en el peor de los casos? ¿Y también para el mejor caso?

¿Cuál es una explicación intuitiva para el algoritmo de maximización condicional de expectativa (ECM)?

¿Qué tan preciso es el algoritmo de predicción de personalidad de Faception?