Si el número de caracteres en total es:
- Par, y si cada personaje aparece exactamente un número par de veces;
- 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.
- ¿Cuánto puede ganar un ingeniero de software promedio trabajando en una compañía promedio en los Estados Unidos? ¿Cuánto dinero se destina al pago de impuestos del salario?
- ¿Cuáles son las tres primeras cosas que harías para hacer la transición de un equipo de desarrollo a la práctica de scrum?
- Cómo mantenerse actualizado en ingeniería de software
- ¿Cuál fue la primera reverberación basada en software disponible? Sé que los VST no se desarrollaron hasta mediados de los noventa, pero ¿qué reverberación de software digital sin hardware podría usar en los años ochenta, presumiblemente por una audiencia increíblemente mínima?
- ¿Hay un buen libro de introducción o guía sobre cómo programar simulaciones (económicas, comerciales, físicas, etc.)?
// 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);
}
}
}