समस्या
दो स्ट्रिंग्स str1 और str2 दिए गए हैं, उन वर्णों की संख्या गिनें जो दोनों स्ट्रिंग्स में समान रूप से मौजूद हैं। प्रत्येक वर्ण की गणना केवल उतनी बार की जाती है जितनी बार वह दोनों स्ट्रिंग्स में न्यूनतम बार आता है।
उदाहरण
const str1 = 'aabbcc'; const str2 = 'adcaa';
आउटपुट: 3 (सामान्य वर्ण: 'a' दो बार, 'c' एक बार)।
कार्यान्वयन
const commonCharacterCount = (str1 = '', str2 = '') => {
let count = 0;
str1 = str1.split('');
str2 = str2.split('');
str1.forEach(e => {
if (str2.includes(e)) {
count++;
str2.splice(str2.indexOf(e), 1); // मिलान वाले वर्ण को हटा दें ताकि दोबारा गिनती न हो
}
});
return count;
};
console.log(commonCharacterCount(str1, str2)); // 3आउटपुट
3
व्याख्या
- दोनों स्ट्रिंग्स को वर्ण सरणियों में विभाजित किया जाता है।
str1के प्रत्येक वर्ण के लिए, जांचें कि क्या वहstr2में मौजूद है।- यदि हां, तो गणना बढ़ाएं और उस वर्ण को
str2से हटा दें ताकि उसका पुनः उपयोग न हो। - यह दृष्टिकोण डुप्लिकेट वर्णों को सही ढंग से संभालता है।
समय जटिलता: O(n*m) जहां n और m स्ट्रिंग्स की लंबाई हैं। बड़े इनपुट के लिए, आवृत्ति मानचित्र (frequency maps) का उपयोग करके O(n+m) में अनुकूलित किया जा सकता है।