¿Cuál es la forma más eficiente de detectar, si una cadena es un anagrama de un palíndromo?

El enfoque ingenuo de encontrar todos los anagramas posibles y determinar si alguno de ellos es un palíndromo tiene una complejidad exponencial.

Sugiero el siguiente algoritmo que tiene complejidad polinómica.
Algoritmo:
1. Tome la cadena de entrada
2. ¿La longitud de la cuerda es pareja?
Goto 3 más Goto 4.
3. Encuentra la aparición de cada carácter en cadena,
Si la aparición de cada personaje es par
Salida sí. ir a 5
más
Salida NO. ir a 5
4. Encuentra la aparición de cada personaje
Si la aparición de cada carácter es par, y la aparición de exactamente un carácter es impar.
Salida sí. ir a 5
más
Salida No. goto 5
5. Parar

Ejemplo:
Cadena: aacddc
longitud par, la aparición de cada carácter es 2 (par) ,, Resultado Sí
Cadena: aaacddc
Longitud impar, la aparición de cada carácter es 2 (par) excepto ‘a’ que es 3 … Resultado Si.
Cadena: aaacccdde
Longitud impar, ocurrencia de 3 caracteres impares (a, c, d). Resultado, NO

Prueba:
Cadena de longitud uniforme:
Para que una cadena sea palíndromo, para cada carácter en el lado izquierdo del punto medio de la cadena, debe haber el mismo carácter en el lado derecho del punto medio.
Cadena de longitud impar:
Para que una cadena sea palíndromo, para cada carácter en el lado izquierdo del punto medio de la cadena, debe haber el mismo carácter en el lado derecho del punto medio. de personajes lo flanquean a ambos lados.

El algoritmo O (n) es sencillo, donde n es la longitud de la cadena. Mantenga la cuenta por la cantidad de veces que cada carácter aparece en cadena. Si más de un carácter aparece un número impar de veces, la cadena no puede ser un anagrama de un palíndromo; de lo contrario, la cadena es un anagrama de un palíndromo.