2011-08-16 10 views
5

Duplicar posibles:
What is an easy way to tell if a list of words are anagrams of each other?implementación de una función de anagrama en C#

Cuál es la mejor manera (el rendimiento de ancho) para escribir una función en C# que tiene dos cadenas y devuelve verdadero cuando las cadenas son anagramas entre sí y devuelven falso. Ejemplo de anagramas son:

abet beat beta bate 
abides biased 

anagrams link

Al aplicar el presente, es posible que haya espacio en cada cadena?

¡Cualquier idea sería muy apreciada!

+0

¿Deberes? Si es así, etiqueta esto como tal. – Yuck

+0

hace esto ayuda: http://stackoverflow.com/questions/522112/what-is-an-easy-way-to-tell-if-a-list-of-words-are-anagrams-of-eachother – shelleybutterfly

Respuesta

5

Una solución fácil sería ordenar los caracteres alfabéticamente y compararlos entre sí.

public static class AnagramExtensions 
{ 
    public static bool IsAnagramOf(this string word1, string word2) 
    { 
     return word1.OrderBy(x => x).SequenceEqual(word2.OrderBy(x => x)); 
    } 
} 

A continuación, se usa:

static void Main() 
    { 
     string word1 = "cat"; 
     string word2 = "tac"; 

     Console.WriteLine(word1.IsAnagramOf(word2)); 

     string word3 = "cat"; 
     string word4 = "dog"; 

     Console.WriteLine(word3.IsAnagramOf(word4)); 
    } 

La salida en este caso habría

True

False

8

Una forma sencilla (ingenuo?), Usando LINQ:

"abides".OrderBy(c=>c).SequenceEqual("biased".OrderBy(c=>c)) 
+0

+1 muy sucinto, dice en una línea lo que algunas de las soluciones en http://stackoverflow.com/questions/522112/what-is-an-easy-way-to-tell-if-a-list-of- las palabras-son-anagramas-de-cada-otra toman media página para decir. :) – shelleybutterfly

0

Cómo no hacer esto: elimine todos los espacios en blanco de cada una de las cadenas. Utilice uno de los algoritmos en Algorithm to generate anagrams para generar todas las permutaciones posibles de la primera cadena. Finalmente, busca en la lista de permuaciones para un partido; si hay uno, entonces los dos son anagramas; de lo contrario, no.

Cuestiones relacionadas