string - यह कहने का एक आसान तरीका क्या है कि क्या शब्दों की सूची एक दूसरे के अनारोगा है?




language-agnostic anagram (7)

अच्छी बात यह है कि हम सभी को सी -8 की वास्तविकता में रहते हैं, जो कि तुल्य कोर मशीनों पर स्मृति के oozles के साथ छोटी शब्दों की छंटनी करते हैं :-)

हालांकि, यदि आप मेमोरी हो गए हैं और मूल डेटा को छू नहीं सकते हैं और आप जानते हैं कि उन शब्दों में एएससीआईआई तालिका के निचले आधे हिस्से में वर्ण होते हैं, तो आप एक अलग एल्गोरिथ्म के लिए जा सकते हैं जो प्रत्येक अक्षर की प्रत्येक घटना की गणना करता है सॉर्टिंग के बजाय शब्द

आप उस एल्गोरिदम का विकल्प चुन सकते हैं यदि आप इसे ओ (एन) में करना चाहते हैं और स्मृति उपयोग (प्रत्येक यूनिकोड के लिए एक काउंटर काफी महंगा हो सकता है) के बारे में परवाह नहीं करते हैं।

आप उन शब्दों को कैसे सूचीबद्ध करेंगे जो एक-दूसरे के अनारोगात्मक हैं?

मुझे यह सवाल पूछा गया जब मैंने अपने वर्तमान नौकरी के लिए आवेदन किया

orchestra इस्तेमाल सभी मूल अक्षरों के साथ ही किया जा सकता है, ताकि एक बार ठीक से इस्तेमाल किया जा सके, इसलिए शब्द एक-दूसरे के अनचाहा हैं।



पत्रों को क्रमित करें और तुलना करें (पत्र द्वारा पत्र, स्ट्रिंग की तुलना करें ...) पहली चीजें हैं जो मन में आती हैं


प्रत्येक तत्व को छाँटें (सफेद स्थान निकालना) और पिछले की तुलना करें। अगर वे सभी समान हैं, तो वे सभी आरेखण हैं।


  1. लंबाई की तुलना करें (यदि बराबर नहीं, मौका नहीं)
  2. तार की लंबाई के एक बिट वेक्टर बनाओ
  3. पहली स्ट्रिंग में प्रत्येक char लिए दूसरे में इसके बारे में घटनाओं का पता लगाएं
  4. पहले अनसेट घटना के लिए बिट सेट करें
  5. यदि आप विफल हो जाने के साथ एक स्टॉप पा सकते हैं

अच्छी तरह से सूची में शब्दों को सॉर्ट करें।

अगर एबीसी, बीसीए, कैब, सी बी ए इनपुट हैं, तो सॉर्ट की गई सूची एबीसी, एबीसी, एबीसी, एबीसी होगी।

अब उनके सभी हैश कोड समान हैं। हैशकोड्स की तुलना करें


अनाग्राम के लिए प्रयास किए गए हैशोड लॉजिक मुझे गलत आउटपुट देता है I

public static Boolean anagramLogic(String s,String s2){
    char[] ch1 = s.toLowerCase().toCharArray();
        Arrays.sort(ch1);
        char[] ch2= s2.toLowerCase().toCharArray();
        Arrays.sort(ch2);
        return ch1.toString().hashCode()==ch2.toString().hashCode(); //wrong
    }

इस कोड को सुधारने के लिए, नीचे एकमात्र विकल्प है जो मैं देख रहा हूं, किसी सिफारिशों की सराहना करता हूं

char[] ch1 = s.toLowerCase().toCharArray();
        Arrays.sort(ch1);
        char[] ch2= s2.toLowerCase().toCharArray();
        Arrays.sort(ch2);
        return Arrays.equals(ch1,ch2);
    }




anagram