7
votes

Vérifiez même / impair pour Palindrome?

est-ce une bonne idée de vérifier la longueur d'un numéro / une chaîne de palindrome? La plupart des extraits que j'ai rencontrés ne font pas ce test de base. Si la longueur est même, elle ne peut pas être un palindrome, non? xxx

ou est-ce juste meilleur (c'est-à-dire plus rapide) pour commencer à comparer les premier et les derniers numéros / lettres directement?

EDIT : D'accord, question stupide, aurait dû réfléchir deux fois! :)


1 commentaires

Doc, note, je me dissiète! Un rapide n'empêche jamais une graisse, je régime sur la morue.


8 Réponses :


8
votes

Baab = palindrome et a la longueur de 4 qui est même


7 commentaires

NON Alternativement, nous aurions pu avoir baaaab - c'est toujours un palindrome


BB est aussi un palindrome :-)


"B" est aussi un palindrome. "" est aussi un palindrome. Sheesh.


@John, "B" a une longueur impaire. Sheesh.


@NICK: reformulation: un palindrome peut avoir n'importe quelle longueur (même 0).


Palindrome ne nécessite pas de longueur, il doit simplement lire la même chose dans les deux sens. Sheesh. en.wikipedia.org/wiki/palindrome


@MynameCoffey, c'est pourquoi ils ont également appelé des inscriptions de crabe. Sheesh. : o)



1
votes

Même la longueur des chaînes peut aussi être des palindromes aussi. Wikipedia ne dit rien de cette restriction.


0 commentaires

25
votes

abba - un exemple de palindrome de quatre lettres signifie même longueur.

A palindrome est un mot, une phrase, numéro ou autre séquence de caractères qui lit le même verso ou en avant ...


5 commentaires

Considérez également que si vous répétez un mot vers l'avant, puis de l'arrière, que ce soit une longueur égale, le mot combiné va avoir une longueur pair, par ex. Bonjour = Helloolleh.


Je n'aurais jamais deviné que cela pourrait être une réponse valide à une question liée à la programmation.


@James "Dave Jarvis" a modifié la réponse et a placé un lien, la réponse originale était assez significative.


Haha, ma réponse originale a formé une phrase réelle, qu'as-tu fait?!? Joli lien!


Cela devrait être en cours d'exécution pour le prix «Réponse accepté le plus court».



10
votes

Le moyen le plus simple de vérifier qu'un palindrome consiste simplement à comparer la chaîne contre son inverse: xxx

Ceci utilise des tranches étendues avec une étape négative pour marcher en arrière via s et obtenir l'inverse.


2 commentaires

Vouliez-vous deux signes égaux là-bas (pour une valeur de retour booléen)? retour S == S [:: - 1]


Utilisez == pas = (plus de caractères pour faire trop de pile heureux)



2
votes

cas simple: aa.

cas plus compliqué: AAAA.

et ainsi de suite.


1 commentaires

Chaque fois que je lisais "AA", je reçois une réaction de branle à genoux pour dire "Pahoehoe".



3
votes

Essayez ceci:

is_palindrome = lambda s : all(s1==s2 for s1,s2 in zip(s[:len(s)/2],s[-1:-(len(s)+1)/2:-1]))


3 commentaires

Cette solution prend autant de mémoire que @sth: la mise en œuvre beaucoup plus simple est d'environ 1 / 10ème de la vitesse et dit que "AB" est un palindrome. Voici une meilleure solution avec uniquement la mémoire de mémoire fixe: tout (S [I] == S [-I-1] pour i dans la plage (len (s) // 2)). C'est aussi plus rapide que votre exemple d'environ 20%.


Aie! Mes tests étaient un peu aussi Light - j'ai édité ma réponse pour désormais échouer sur le test "AB". Mon préjugé récemment a été davantage pour itération des éléments que pour l'indexation à l'aide de sous-titres entier, je pense que je vais prendre une exécution légèrement différente à cet effet d'un générateur qui marche des deux extrémités de la chaîne.


Essayez islice, izip et inversé? Tous (C1 == C2 pour C1, C2 dans ISLICE (IZIP (S, INVERSED (S)), 0, LEN (S) // 2))



0
votes
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"

0 commentaires

2
votes

Si string.length est même alors: tout le nombre de caractères devrait être même, afin que nous ne puissions pas avoir de caractère avec un nombre impair.

si string.length est impair alors: un nombre de charme doit être étrange, donc pas tout Le nombre de caractères devrait être même. p>

---------------- J'ai mis en place le JavaScript suivant pour les rôles de suivi: p>

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));


1 commentaires

Merci d'avoir expliqué le but de compter des personnages même et des personnages étranges