ভূমিকা
দুটি স্ট্রিং একই ক্যারেক্টার ধারণ করছে কিনা (অর্ডার এবং কেস বাদে) চেক করার দুটি কার্যকর পদ্ধতি এই আর্টিকেলে দেখানো হয়েছে। এটি অ্যানাগ্রাম (anagram) চেক করার সমান।
পদ্ধতি ১: সর্ট করে তুলনা (সহজ ও পঠনযোগ্য)
const first = 'Aavsg';
const second = 'VSAAg';
const stringSort = function() {
return this.split("").sort().join("");
};
String.prototype.sort = stringSort;
const isEqual = (first, second) =>
first.toLowerCase().sort() === second.toLowerCase().sort();
console.log(isEqual(first, second)); // true
কীভাবে কাজ করে
- `toLowerCase()` - দুটি স্ট্রিংকে ছোট হাতের করুন
- `split("")` - ক্যারেক্টার অ্যারেতে ভাগ করুন
- `sort()` - অ্যালফাবেটিক্যালি সর্ট করুন
- `join("")` - আবার স্ট্রিংয়ে জড়ুন
- তুলনা করুন
পদ্ধতি ২: ফ্রিকোয়েন্সি ম্যাপ (O(n) - দ্রুত)
const first = 'Aavsg';
const second = 'VSAAg';
const isEqual = (first, second) => {
if (first.length !== second.length) return false;
first = first.toLowerCase();
second = second.toLowerCase();
const map = {};
for (let ind in first) {
// প্রথম স্ট্রিংয়ের ক্যারেক্টার: +1
map[first[ind]] = (map[first[ind]] || 0) + 1;
// দ্বিতীয় স্ট্রিংয়ের ক্যারেক্টার: -1
map[second[ind]] = (map[second[ind]] || 0) - 1;
}
// সব ভ্যালু 0 হলে সমান
return Object.values(map).every(val => val === 0);
};
console.log(isEqual(first, second)); // true
তুলনামূলক বিশ্লেষণ
| পদ্ধতি | টাইম কমপ্লেক্সিটি | স্পেস কমপ্লেক্সিটি | পাঠযোগ্যতা |
|---|---|---|---|
| সর্ট + তুলনা | O(n log n) | O(n) | উচ্চ |
| ফ্রিকোয়েন্সি ম্যাপ | O(n) | O(k) - k = ইউনিক ক্যারেক্টার | মধ্যম |
আধুনিক ও উন্নত সংস্করণ (ES6+)
১. Map অবজেক্ট ব্যবহার (বেটার পারফরম্যান্স)
const isEqualMap = (a, b) => {
if (a.length !== b.length) return false;
const freq = new Map();
for (const char of a.toLowerCase()) {
freq.set(char, (freq.get(char) || 0) + 1);
}
for (const char of b.toLowerCase()) {
const count = freq.get(char) || 0;
if (count === 0) return false;
freq.set(char, count - 1);
}
return true;
};
২. Array.from + reduce (সংক্ষিপ্ত)
const isEqual = (a, b) =>
a.length === b.length &&
[...a.toLowerCase()].sort().join('') === [...b.toLowerCase()].sort().join('');
৩. Unicode সাপোর্ট (ইমোজি, מיוחד ক্যারেক্টার)
const isEqualUnicode = (a, b) => {
if (a.length !== b.length) return false;
const freq = new Map();
for (const char of a) freq.set(char, (freq.get(char) || 0) + 1);
for (const char of b) {
if (!freq.has(char) || freq.get(char) === 0) return false;
freq.set(char, freq.get(char) - 1);
}
return true;
};
আউটপুট
true
সারাংশ
- ছোট স্ট্রিং/প্রোটোটাইপিং: সর্ট পদ্ধতি সহজ ও পঠনযোগ্য
- বড় স্ট্রিং/প্রোডাকশন: ফ্রিকোয়েন্সি ম্যাপ (Map অবজেক্ট) দ্রুত ও মেমরি দক্ষ
- Unicode সাপোর্ট: `for...of` লুপ বা স্প্রেড অপারেটর (`[...str]`) ব্যবহার করুন