déterminer si une chaîne a tous les caractères uniques?
Quelqu'un peut-il me dire comment faire pour mettre en œuvre un programme pour vérifier une chaîne de caractères contient tous les caractères ?
source d'informationauteur mr_eclair
Vous devez vous connecter pour publier un commentaire.
Si vous parlez d'une chaîne de caractères ASCII:
Créer un tableau int [0-255], un
pour chaque caractère d'index,
initialisé à zéro.
Boucle
chaque caractère de la chaîne et
incrémenter la valeur respective de la matrice de la position du personnage
Si la position de tableau contient déjà un 1, alors que le personnage a déjà été rencontré. Résultat => Pas unique.
Si vous arrivez à la fin
de la chaîne avec aucune occurrence de
(3), Résultat => la chaîne est unique.
Trier les caractères de la chaîne à l'aide de votre algorithme de choix (par exemple, le groupe builtin
qsort
fonction), puis analyser la chaîne de la vérification de la continuité de répéter les lettres; si vous arrivez à la fin sans trouver de, la chaîne contient tous les caractères uniques.Une alternative pourrait être l'utilisation d'une structure qui a un compartiment pour chaque caractère de la chaîne peut contenir, tous initialisés à zéro; vous analysez la chaîne, l'incrémentation de la valeur du seau correspondant à la nature actuelle. Si vous arrivez à incrémenter un seau qui a déjà de 1 à l'intérieur vous êtes sûr que votre chaîne contient des doublons.
Cela peut fonctionner très bien avec
char
s et un tableau (de tailleUCHAR_MAX+1
), mais il obtient rapidement de la main lorsque vous commencer à traiter avec les caractères larges. Dans de tels cas, vous avez besoin d'une table de hachage ou d'une autre "sérieux" conteneur.Le meilleur algorithme dépend de la longueur des chaînes d'examiner, la taille de chaque caractère, la vitesse de l'algorithme de tri et le coût de l'allocation de/à l'aide de la structure pour conserver le caractère fréquences.
Faire une série de lettres, et de compter les valeurs.
set("adoihgoiaheg")
=set(['a', 'e', 'd', 'g', 'i', 'h', 'o'])
:Utiliser un 256 entrées de tableau. Le remplir avec de 0. Maintenant parcourir la chaîne de réglage de l'entrée correspondante dans le tableau 1 si elle est de 0. Sinon, il y a répété caractères dans la chaîne.
Définir un tableau de booléens de taille égale à la jeu de caractères à faux. (Temps Constant). Analyse de la chaîne; pour chaque personnage, inspecter le tableau à la characater du logement; si la valeur est true, la chaîne a des personnages en double. Si la valeur est false, jeu de fente de vrai et de continuer. Si vous arrivez à la fin sans se heurter à un double, il n'y a pas tout et la chaîne ne contient que des caractères uniques. Temps de marche: O(n) où n est la longueur de la chaine, avec une jolie petite constante.
De la même façon (et sans tableaux), utiliser une TABLE de HACHAGE!
//pseudo code:
Temps d'exécution est O(n) et de la mémoire de l'espace est mieux aussi, puisque vous n'avez pas besoin d'un tableau de 256 (asciis)
Utiliser une table de hachage, ajouter la clé pour chaque caractère le long avec le nombre d'occurrences de la valeur. Boucle à travers la table de hachage touches pour voir si vous avez rencontré un count > 1. Si donc, la production de faux.
La solution la plus Simple sera à l'aide de 2 boucles.
Aucune autre structure de données est nécessaire pour garder une trace sur les personnages.
ma réponse originale à cette question a été également faire le tableau similaire technique et de compter le caractère de l'événement.
mais je le faisais en C et je pense qu'il peut être simple à l'aide de certains de manipulation du pointeur et de se débarrasser de la matrice totalement
Sans l'aide de la mémoire supplémentaire:
Je crois il y a un moyen beaucoup plus simple:
J'espère que cela peut vous aider à
}
c'est la solution optimale pour le problème.
il ne prend qu'une variable de type entier et peut dire si elle est unique ou pas, indépendamment de la taille de la chaîne.