2011-08-16 14 views
5

संभव डुप्लिकेट:
What is an easy way to tell if a list of words are anagrams of each other?कार्यान्वयन

क्या सबसे अच्छा तरीका है (प्रदर्शन चौड़ा) सी # है कि दो तार लेता है और सच रिटर्न में एक समारोह में लिखने के लिए है जब तार एक-दूसरे के आरेख होते हैं और अन्यथा झूठी वापसी करते हैं। विपर्यय का उदाहरण हैं:

abet beat beta bate 
abides biased 

anagrams link

इस को लागू करने में, यह है कि वहाँ प्रत्येक स्ट्रिंग में अंतरिक्ष संभव है?

किसी भी विचार की बहुत सराहना की जाएगी!

+0

गृहकार्य? यदि ऐसा है तो कृपया इसे इस तरह टैग करें। – Yuck

+0

यह सहायता करता है: http://stackoverflow.com/questions/522112/what-is-an-easy-way-to-tell-if-a-list-of-words-are-anagrams-of-each-other – shelleybutterfly

उत्तर

5

अक्षरों को क्रमबद्ध रूप से क्रमबद्ध करने और उन्हें एक-दूसरे से तुलना करने का एक आसान समाधान होगा।

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

फिर, इसका इस्तेमाल करने के लिए:

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

इस मामले में उत्पादन किया जाएगा

True

False

8

एक सरल (भोली?) जिस तरह से, का उपयोग करते हुए LINQ:

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

+1 बहुत संक्षिप्त है, एक पंक्ति में कहता है कि http://stackoverflow.com/questions/522112/what-is-an-easy-way-to-tell-if-a-list-of- शब्द-एनाग्राम-के-प्रत्येक-दूसरे को आधा पृष्ठ कहना है। :) – shelleybutterfly

0

यह कैसे नहीं करें: प्रत्येक तार से सभी सफेद जगह हटाएं। पहली स्ट्रिंग के सभी संभावित क्रमिक क्रम उत्पन्न करने के लिए Algorithm to generate anagrams पर एल्गोरिदम का उपयोग करें। अंत में, एक मैच के लिए पारगम्यताओं की सूची खोजें; यदि कोई है, तो दोनों एनाग्राम हैं, अन्यथा, नहीं।

संबंधित मुद्दे