2011-08-16 35 views
5

Olası Çoğalt:
What is an easy way to tell if a list of words are anagrams of each other?Uygulanması

Ne iyi yolu (geniş performans) iki dizeyi alır ve gerçek döndüren C# bir işlev yazmaktır Dizeler birbirinin anagramı olduğunda ve aksi halde yanlış döndürdüğünde. anagrams örneği vardır: Bu uygulanmasında

abet beat beta bate 
abides biased 

anagrams link

, her dizede alanın olmasını mümkün mü?

herhangi bir fikir çok takdir!

+0

Ödev? Eğer öyleyse lütfen bunu etiketleyin. – Yuck

+0

bu yardımı yapar: http://stackoverflow.com/questions/522112/what-is-an-easy-way-to-tell-if-list-of-words-are-anagrams-of-each-other – shelleybutterfly

cevap

5

kolay bir çözüm alfabetik karakterleri sıralamak ve birbirlerine onları karşılaştırmak olacaktır.

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

Sonra kullanmak için:

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)); 
    } 

bu durumda çıkış Basit (? Naif) yolu

True

False

8

olurdu kullanılarak LINQ:

dizelerin her bulunan tüm boşlukları kaldırın: Bunu yapmak için değil Nasıl
"abides".OrderBy(c=>c).SequenceEqual("biased".OrderBy(c=>c)) 
+0

1 çok az ve öz, tek satırda ne diyor http://stackoverflow.com/questions/522112/what-is-an-easy-way-to-tell-if-a-list-of- de çözümlerden bazılarını -bir-anagrams-in-diğer-kelimeler-söylemek yarım sayfa alır. :) – shelleybutterfly

0

. İlk dizgenin tüm olası izinlerini üretmek için Algorithm to generate anagrams adresindeki algoritmalardan birini kullanın. Son olarak, bir eşleşme için izinlerin listesini arayın; eğer varsa, o zaman ikisi anagramlardır, aksi halde değil.