aalhour / aalhour/C-Sharp-Algorithms
IsAnagram bug (per element counts)
- Vorherrschende Sprache
- C#
- Sterne
- 6.2k
- Forks
- 1.4k
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beschreibung
### 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._
Beitragsleitfaden
Rechercherichtung
Das Problem liegt in der Methode Permutations.IsAnagram. Sieh dir die Unit-Tests an, um das aktuelle Verhalten zu verstehen. Der Fehler besteht darin, dass die Anzahl pro Element nicht überprüft wird. Die Korrektur besteht darin, den Algorithmus so zu aktualisieren, dass er die Vorkommen jedes Zeichens zählt. Der bereitgestellte externe Link zeigt eine korrigierte Implementierung. Füge zuerst den fehlschlagenden Testfall hinzu und ändere dann die Methode, damit dieser bestanden wird.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Bereich
- testing-qa
- Issue-Typ
- Bug
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Aktivitätsstatus
- Veraltet
- Klarheit
- Klar beschrieben
- Anfängerfreundlichkeit
- 70/100