Trouvez le caractère avec la plupart des occurrences dans la chaîne avec C #?
Par exemple, j'ai une chaîne de caractères:
"abbbbccd"
b
a le plus d'occurrences. Lors de l'utilisation de C++, la meilleure façon de gérer cela est de l'insertion de chaque caractère dans un map<>
. Dois-je faire la même chose en C#? Est-il une manière élégante de le faire à l'aide de LINQ?
source d'informationauteur Chan
Vous devez vous connecter pour publier un commentaire.
Notes:
"aaaabbbb"
un seul de ceux-ci seront retournés (merci xanatos pour un commentaire. Si vous avez besoin de tous les éléments avec un maximum de compter, utiliser Albin de la solution à la place.Ce parce que quelqu'un a demandé pour une version 2.0, donc pas de LINQ.
Au lieu de cela pour le LINQ version. Il sera extrait jumelé "records" (aaaabbbb == a, b). Il ne fonctionnera PAS si str == Chaîne de caractères.Vide.
Inspiré de Stephen réponse, presque le même:
Mise à jour: Fait une rapide analyse comparative de cette réponse vs Jodrell de l' réponse (communiqué de construire, de débogage détachés, oh oui)
MODIFIER 3
Voici ma dernière réponse qui, je pense (juste) des nuances Nawfal est pour les performances sur des séquences plus longues.
Toutefois, compte tenu de la réduction de la complexité des Nawfal réponseet de ses plus universel des performances, en particulier en ce qui concerne la question, j'avais le choix.
EDIT 2MODIFIERSi vous voulez un efficace solution générique, qui explique le fait que plusieurs éléments pourraient avoir la même fréquence, commencer avec cette extension,
Cette extension fonctionne dans tous les scénarios suivants
ou,
Noter que
mostFrequent
est unKeyValuePair<int, IEnumerable<char>>
.Si donc l'esprit que vous pouvez simplifier ce à un autre poste,
qui, évidemment, peut être utilisé ainsi,
ici,
mostFrequent
est unIEnumerable<char>
.Trouver la plus simple et sans construite en fonction utilisée
des exemples de code et des liens
En savoir plus sur la façon d'obtenir un max d'occurrence et qu'est-ce que le flux.
Comment obtenir un max s'est produite caractère et max occurrence dans la chaîne de
C'est Femaref la solution modifié pour renvoyer plusieurs lettres si leur nombre de matches. Il n'est plus un one-liner, mais encore assez concis.
Après discussion avec nawfal:
Code: