खोज…


परिचय

वर्ण के समान सेट के साथ दो स्ट्रिंग को एनाग्रम कहा जाता है। मैंने यहाँ जावास्क्रिप्ट का उपयोग किया है।

हम str1 का हैश बनाएंगे और गिनती +1 बढ़ाएँगे। हम 2 स्ट्रिंग पर लूप करेंगे और सभी वर्णों को हैश में और हैश की की वैल्यू में कमी की जाँच करेंगे। हैश कुंजी के सभी मान शून्य हैं विपर्यय होंगे की जाँच करें।

नमूना इनपुट और आउटपुट

EX1: -

let str1 = 'stackoverflow';
let str2 = 'flowerovstack';

ये तार एनाग्राम हैं।

// str1 से हैश बनाएं और एक गिनती बढ़ाएं।

hashMap = {
    s : 1,
    t : 1,
    a : 1,
    c : 1,
    k : 1,
    o : 2,
    v : 1,
    e : 1,
    r : 1,
    f : 1,
    l : 1,
    w : 1
}

आप देख सकते हैं कि hashKey 'o' का मान 2 है क्योंकि o स्ट्रिंग में 2 गुना है।

अब str2 पर लूप करें और प्रत्येक वर्ण के लिए जाँच करें, हैश मैप में मौजूद हैं, यदि हाँ, हैशपैड की की वैल्यू घटती है, तो अन्य गलत है (जो यह दर्शाता है कि यह विपर्यय नहीं है)।

hashMap = {
    s : 0,
    t : 0,
    a : 0,
    c : 0,
    k : 0,
    o : 0,
    v : 0,
    e : 0,
    r : 0,
    f : 0,
    l : 0,
    w : 0
}

अब, hashMap वस्तु पर लूप और सभी मानों की जांच करें hashMap की कुंजी में शून्य।

हमारे मामले में सभी मान शून्य हैं इसलिए इसका विपर्यय है।

एनाग्रम के लिए सामान्य कोड

(function(){

    var hashMap = {};
    
    function isAnagram (str1, str2) {
    
        if(str1.length !== str2.length){
            return false;
        }
        
        // Create hash map of str1 character and increase value one (+1).
        createStr1HashMap(str1);

        // Check str2 character are key in hash map and decrease value by one(-1);
        var valueExist = createStr2HashMap(str2);

        // Check all value of hashMap keys are zero, so it will be anagram.
        return isStringsAnagram(valueExist);
    }
    
    function createStr1HashMap (str1) {
        [].map.call(str1, function(value, index, array){
            hashMap[value] = value in hashMap ?  (hashMap[value] + 1) : 1;
            return value;
        });
    }
    
    function createStr2HashMap (str2) {
        var valueExist = [].every.call(str2, function(value, index, array){
            if(value in hashMap) {
                hashMap[value] = hashMap[value] - 1;
            }
            return value in hashMap;
        });
        return valueExist;
    }
    
    function isStringsAnagram (valueExist) {
        if(!valueExist) {
            return valueExist;
        } else {
            var isAnagram;
            for(var i in hashMap) {
                if(hashMap[i] !== 0) {
                    isAnagram = false;
                    break;
                } else {
                    isAnagram = true;
                }
            }
    
            return isAnagram;
        }
    }
    
    isAnagram('stackoverflow', 'flowerovstack'); // true
    isAnagram('stackoverflow', 'flowervvstack'); // false
    
})();

समय जटिलता: - 3 एन यानी ओ (एन)।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow