aalhour / aalhour/C-Sharp-Algorithms
IsAnagram bug (per element counts)
- Langage dominant
- C#
- Étoiles
- 6.2k
- Forks
- 1.4k
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Description
### Describe the bug
The `IsAnagram` function is not checking per-element counts. It is only checking if they have the same elements, but not if the count of each element matches.
A more appropriate name for the current logic is something like `ContainsNoDifferingElements` or `IntersectsMatch` rather than `IsAnagram`. I would recommend changing the name or the logic of the method.
> Note: If you aren't going to check per-element counts, then you should also get rid of this check in `IsAnagrams`:
> ```cs
> if (source.Length != other.Length)
> return false;
> ```
> because length doesn't matter if you don't also check per-element counts.
### To Reproduce
Add the following case to the `IsAnagram` unit tests:
```cs
string aab = "aab";
string abb = "abb";
Assert.False(Permutations.IsAnargram(aab, abb));
```
### Expected behavior
Spans of the same length and elements but different per-element counts should not be considered re-orders/anagrams of each other.
### Environment:
_master branch_
### Additional context
I have written my own version of this algorithm in C# _(that fixes this issue)_ if interested here...
> Source Code: https://github.com/ZacharyPatten/Towel/blob/d2660e208ad3a44ab22f192834760c5b93dc82ac/Sources/Towel/Statics-SequenceAnalysis.cs#L1321
> Examples: https://github.com/ZacharyPatten/Towel/blob/d2660e208ad3a44ab22f192834760c5b93dc82ac/Examples/BasicsAndExtensions/Program.cs#L406
> Testing: https://github.com/ZacharyPatten/Towel/blob/d2660e208ad3a44ab22f192834760c5b93dc82ac/Tools/Towel_Testing/Statics.cs#L2086
> _Note: `MapHashLinked` is my version of a `Dictionary` if you look at the source code._
Guide de contribution
Ouvrir le guide de contribution
Piste de recherche
Le problème se trouve dans la méthode Permutations.IsAnagram. Consultez les tests unitaires pour comprendre le comportement actuel. Le bug vient du fait que les quantités de chaque élément ne sont pas vérifiées. La correction consiste à mettre à jour l’algorithme afin de compter les occurrences de chaque caractère. Le lien externe fourni montre une implémentation corrigée. Ajoutez d’abord le cas de test qui échoue, puis modifiez la méthode pour qu’il réussisse.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Domaine
- testing-qa
- Type d'issue
- Bug
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Activité
- À l'abandon
- Clarté
- Clairement spécifiée
- Accessibilité débutants
- 70/100