Vérifiez si la chaîne a toutes les lettres de l'alphabet
Quelle serait la meilleure logique de vérifier toutes les lettres d'une chaîne donnée.
Si toutes les 26 lettres sont disponibles dans la chaîne, je veux vérifier et effectuer les opérations. par exemple. Pack ma boîte avec cinq douzaines de liqueur de cruches.
- Serait à l'aide d'une table de Hachage être utile?
- Ou à l'aide d'une carte bits? ou de toute autre façon?
BTW mon code en Java.
pack "ma boîte à cinq doze liqor cruches"? Soin d'expliquer? 🙂
C'est un pangram, et l'un des rares courts que fait réellement sens.
Oh, et après vous avez terminé avec les cruches, Fret pour moi soixante-douzaine de pintes les pots et les douze noir casseroles.
C'est un pangram, et l'un des rares courts que fait réellement sens.
Oh, et après vous avez terminé avec les cruches, Fret pour moi soixante-douzaine de pintes les pots et les douze noir casseroles.
OriginalL'auteur Vivek | 2010-09-17
Vous devez vous connecter pour publier un commentaire.
Pas encore totalement optimisé:
N'utilisez pas
0x3FFFFFF
être plus rapide?Le côté droit de la
|
contient pas de variables, de sorte qu'il serait calculé au moment de la compilation et stockée comme une constante. (Ce qui suppose un compilateur avec un optimiseur.)Je voulais dire plus vite
compilation
. heehee... 🙂 vrai!En fait, pas besoin de (i | ...), vous pouvez aussi bien utiliser if (i == (1 << (1 + 'Z' - 'A')) - 1) - ou Entier.bitCount(i) == 26.
OriginalL'auteur Thomas Mueller
À l'aide d'un BitMap, je suis en supposant que vous vouliez cas insenstive.
Mise à jour: Solution de Thomas est plus efficace que le suivant. 🙂 L'utiliser.
De croissance de l'ensemble de bits pour les caractères qui ne sont pas ASCII latine.
Cette réponse est incorrecte. Par exemple le test suivant de la chaîne, à tort, rapport de "faux":
abcdefeghjiklmnopqrstuvwxyzäöü
, et les suivantes, à tort, rapport "vrai":abcdefeghjiklmnopqrstuvwäöü
. Notez qu'il y a 47444 (!) distinctes "majuscules" caractères de l'Unicode codepoints 0 .. 0xffff.OriginalL'auteur st0le
J'irais pour une image bitmap. Si vous incrémenter un compteur à chaque fois que vous définissez une entrée dans l'image 1, vous pouvez le retour précoce dès que vous aurez vu toutes les lettres. J'espère que ce n'est pas pour faire respecter les exigences de mot de passe.
OriginalL'auteur
Garder un
boolean
tableau de taille 26. Chaque position de la matrice indique si un caractère est présent ou pas (a est à 0, b est à 1, etc.). Initialement, tous sont mis à false. Maintenant faire une analyse unique, par le biais de la chaîne caractère par caractère, le réglage de la valeur de ce caractère de vrai. À la fin, vérifiez si tous les 26 index contiennent de vrai.Je ne comprends pas ce que tu veux dire. Mon chèque à la fin est quelque chose comme cela
boolean ret=true;for(int i=0;i<26 && ret;i++) ret&=seen[i];return ret;
.Vous n'avez pas besoin de faire une deuxième analyse, juste incrémenter un compteur lorsque vous allumez un peu, c'est à dire ...{ compteur+=(!lettres[i]); lettres[i]++} ... retour 26 == compteur;
C'est vrai :). Merci pour cette remarque.
Eh bien, si vous découvrez qu'il n'y a pas de "b" dans votre chaîne d'entrée c'est une) inutile d'essayer de 24 plus de personnages et b) inutile de scanner votre tableau à la fin. Dans ce cas, vous voudriez que votre fonction retourne false immédiatement.
OriginalL'auteur MAK
Un tableau de 26 booléen est assez, chaque entrée représentant les lettres de l'alphabet. Vous pouvez définir l'entrée à true lorsque la lettre est trouvée.
OriginalL'auteur Guillaume Lebourgeois
J'irais pour un tamis de l'algorithme sur les 26 lettres. Juste mon $.02.
Edit: Un tableau de 26 valeurs qui représentent les 26 lettres de l'alphabet. Puis analyser la chaîne, en vérifiant à chaque lettre que vous rencontrez. À la fin, vérifiez si les 26 lettres ont été vérifiées.
OriginalL'auteur Didier Trosset
OriginalL'auteur Narendra Reddy Lingam
Essayez celui-ci, il est facile et simple à comprendre
OriginalL'auteur ANOOP KUMAR
Vous pourriez itération sur votre chaîne pour chaque lettre de l'alphabet que vous souhaitez vérifier. Lorsque vous trouvez la lettre que vous recherchez, continuer avec le prochain. Si vous ne le faites pas, abandonner. Voici quelques pseudo-code:
De cette façon, vous n'avez pas besoin de stocker les informations pour chaque lettre, mais vous avez à la recherche à la chaîne, encore et encore pour chaque lettre. Vous vous retrouvez à l'aide dépendra de vos besoins: faut-il rapide? Devrait-il utiliser peu de mémoire? Votre décision. 🙂
OriginalL'auteur Bombe
OriginalL'auteur Srinaath
Ce n'est pas une solution optimale, pourtant facile à comprendre 🙂 !
}
OriginalL'auteur Raghavendran Gopalakrishnan
Explication
Je vais d'abord convertir la totalité de la chaîne de caractères en majuscules.
dans la Table ASCII, vous pouvez trouver des majuscules caractères plages, c'est à dire entre 65 à 90
Donc,
for
boucle devrait commencer à partir de 65 ans et à la fin sur 90.Vérifier si la chaîne contient des caractères ASCII dans le fichier.
Je suis la conversion d'entier en char et de mettre des "" à la chaîne
Cela implique que si la chaîne n'a pas l'actuel char à
i
, je vaisreturn false
.Vous pouvez encore faire mieux en utilisant
char i
en boucleExplication fait bro ^_^
OriginalL'auteur AmrDeveloper
Pas une solution optimale, mais il fonctionne.
OriginalL'auteur sahil mehta
Juste une autre solution, à l'aide du Tableau au lieu de Définir la
OriginalL'auteur src3369
essayer cette méthode est très simple et fonctionne rapidement
avec cet exemple
sera de retour cette résultats
OriginalL'auteur Cristian Babarusi