¿Cómo podemos probar si se puede formar una cadena de palíndromo con un conjunto dado de caracteres?

Si el número de caracteres en total es:

  1. Par, y si cada personaje aparece exactamente un número par de veces;
  2. Extraño, luego todos los caracteres menos uno, aparecen dos veces, y el único carácter que no aparece dos veces aparece un número impar de veces.

El único punto discutible es si desea considerar una cadena con una longitud de solo un carácter un palíndromo o no.

A continuación se proporciona una implementación del algoritmo anterior.

// Complejidad del tiempo: O (n + m)
// donde n es la longitud de la cadena
// ym es el número total de caracteres únicos
// en la cadena
// Complejidad del espacio: O (m) sin contar la entrada original
utilizando el sistema;
usando System.Collections.Generic;

espacio de nombres PalindromChecker
{
Programa de clase
{
vacío estático Main (string [] args)
{
Console.WriteLine (IsPallindrome (“a”));
Console.WriteLine (IsPallindrome (“ab”));
Console.WriteLine (IsPallindrome (“aba”));
Console.WriteLine (IsPallindrome (“abba”));
Console.WriteLine (IsPallindrome (“abcba”));
Console.WriteLine (IsPallindrome (“bbaa”));
Console.WriteLine (IsPallindrome (“aabb”));
}

BoP estático IsPallindrome (cadena s)
{
if (s == null) arroja una nueva ArgumentNullException (nameof (s));

if (string.IsNullOrEmpty (s)) devuelve falso;

var len = s.Longitud;

// Si desea considerar un solo carácter
// como un palíndromo, luego descomenta esta línea
if (len == 1) devuelve falso;

var count = new Dictionary ();

para (int i = 0; i <len; i ++)
if (cuenta.ContainsKey (s [i]))
cuenta [s [i]] ++;
más
count.Add (s [i], 1);

var oddCounts = 0;

foreach (var kvp en conteo)
if (kvp.Value% 2! = 0)
oddCounts ++;

var lenIsEven = (len% 2 == 0);

return (lenIsEven? oddCounts == 0: oddCounts == 1);
}
}
}

More Interesting

¿Cómo debo prepararme para las entrevistas de los roles de ingeniero de software en empresas comerciales de alta frecuencia de Nueva York (por ejemplo, HRT, Citadel, KCG, TRC)?

¿Es el software de estimación de costos como Quick FPA una buena manera de estimar los costos del software, si no tengo experiencia de proyectos anteriores?

Obtendré un '0' de mi examen de Java. ¿Qué está mal conmigo?

¿A los INFP en ingeniería de software o una carrera altamente técnica les gusta lo que están haciendo?

¿Qué valor puedo ganar pagando dinero para ir a un campo de entrenamiento de codificación cuando puedo aprender por mi cuenta utilizando recursos gratuitos en Internet?

Cómo convertirse en ingeniero de software en casa

Estoy muy interesado en las pruebas de software de investigación. ¿Cómo y en qué temas de las pruebas de software debo investigar?

¿Por qué los productos de software de IBM son caros en comparación con otros?

¿Cuál es el concepto de abstracción en términos de ingeniería de software?

¿Cómo puede ser excepcionalmente bueno para encontrar código para un problema (aplicación / software) que ya ha sido codificado?

¿Dónde se usan las API en aplicaciones del mundo real?

¿Ves el sindicalismo artesanal en la ingeniería de software?

¿La mayoría de las compañías de software que usan tecnologías de Microsoft usan principalmente patrones de diseño ASP.net MVC?

¿Cuáles son algunos ejemplos de diseño de software realmente malo que tienes que usar?

¿Puede ser un desarrollador de software 'puro' o también necesita poseer conocimientos específicos de la industria?