Compruebe par / impar para palíndromo?
-
21-09-2019 - |
Pregunta
¿Es una buena idea para comprobar la longitud del par / impar de un número capicúa / cuerda? La mayoría de los fragmentos que me encontré no hacen esta prueba básica. Si la longitud es uniforme, no puede ser un palíndromo, no?
if len(var) % 2 != 0:
# could be a palindrome, continue...
else:
break
O es simplemente mejor (es decir, más rápido) para iniciar la comparación de los primeros y los últimos números / letras directamente?
Editar : De acuerdo, pregunta estúpida, debería haber pensado dos veces! :)
Solución
ABBA - un ejemplo de palíndromo de cuatro letras que significan longitud par.
A palíndromo es una palabra, frase, número , u otra secuencia de caracteres la que se lee igual hacia atrás o adelante ...
Otros consejos
La forma más sencilla para comprobar si hay un palíndromo es simplemente comparar la cadena contra es inversa:
def ispalindrome(s):
return s == s[::-1]
Este usos extendidos rebanadas con un paso negativo a caminar hacia atrás a través s
y obtener la inversa.
baab = palíndromo y tiene una longitud de 4, que es incluso
Prueba esto:
is_palindrome = lambda s : all(s1==s2 for s1,s2 in zip(s[:len(s)/2],s[-1:-(len(s)+1)/2:-1]))
comprueba solamente la mitad delantera de la mitad trasera, y cortocircuitos tan pronto como se encuentre un desajuste.
simple caso:. Aa
caso más complicado:. AAAA
Y así sucesivamente.
Incluso las cadenas de longitud pueden ser palíndromos también. Wikipedia no dice nada acerca de esta restricción.
n=raw_input("Enter a string==>")
n=int(n)
start=0
term=n
while n>0:
result=n%10
start=start*10+result
n=n/10
print start
if term==start:
print "True"
else:
print "False"
Si string.length es incluso entonces:. Todos los caracteres conteo debe ser uniforme, por lo que no podemos tener un char con el recuento extraña
Si es impar string.length continuación:. Un recuento de carbón debe ser impar, por lo que no cuentan todos los caracteres debe ser aún
--------------- que implementó el siguiente JavaScript para el seguimiento papeles:
function isStrPermutationOfPalindrome(_str) { // backward = forward
var isPermutationOfPalindrome = true;
var _strArr = [..._str];
var _strArrLength = _strArr.length;
var counterTable = getCharsTabularFrequencies(_str);
var countOdd = 0;
var countEven = 0;
for (let [ky, val] of counterTable) {
if (val % 2 == 0) {
countEven = countEven + 1;
} else {
countOdd = countOdd + 1;
}
}
if (_strArrLength % 2 == 0) {
//Even count of all characters,otherwise false.
//so can not have a character with odd count.
if (countOdd != 0) {
isPermutationOfPalindrome = false;
}
} else {
//Odd count of 1 character
//so not all chars with even count, only one char of odd count.
if (countOdd > 1 || countOdd == 0) { //no odd, or more than one odd [ only one odd should be to return true]
isPermutationOfPalindrome = false;
}
}
return isPermutationOfPalindrome;
}
function getCharsTabularFrequencies(str) {
str = str.toLowerCase();
var arr = Object.assign([], str);
var oMap = new Map();
var _charCount = 0;
for (let i = 0; i < arr.length; i++) {
if (arr[i] === ' ') {
continue;
}
_charCount = 0;
for (let j = 1; j < arr.length; j++) {
{
if (arr[i] === arr[j]) {
_charCount = _charCount + 1;
}
}
}
if (i == 0)
_charCount = _charCount + 1;
if (!oMap.has(arr[i]))
oMap.set(arr[i], _charCount)
}
return oMap;
}
let _str = 'tactcoapapa';
console.log("Is a string of '" + _str + "' is a permutation of a palindrome ? ANSWER => " + isStrPermutationOfPalindrome(_str));