aalhour / aalhour/C-Sharp-Algorithms

IsAnagram bug (per element counts)

Abierto Apto para principiantes
#153 2 comentarios 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
C#
Estrellas
6.2k
Forks
1.4k
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

### 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._

Guía de contribución

Abrir la guía de contribución

Línea de trabajo

El problema está en el método Permutations.IsAnagram. Consulta las pruebas unitarias para entender el comportamiento actual. El error es que no comprueba las cantidades de cada elemento. La solución consiste en actualizar el algoritmo para contar las apariciones de cada carácter. El enlace externo proporcionado muestra una implementación corregida. Añade primero el caso de prueba que falla y, después, modifica el método para que lo supere.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Área
testing-qa
Tipo de issue
Error
Dificultad
2/5
Tiempo estimado
1-3 horas
Estado de actividad
Estancado
Claridad
Bien especificado
Aptitud para principiantes
70/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.