কম্পিউটার টিউটোরিয়াল

JavaScript-এ দুই স্ট্রিং অ্যারে কেস-ইনসেনসিটিভ ও অর্ডার-ইনডিপেন্ডেন্টভাবে তুলনা

ভূমিকা

দুটি স্ট্রিং একই ক্যারেক্টার ধারণ করছে কিনা (অর্ডার এবং কেস বাদে) চেক করার দুটি কার্যকর পদ্ধতি এই আর্টিকেলে দেখানো হয়েছে। এটি অ্যানাগ্রাম (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

কীভাবে কাজ করে

  1. `toLowerCase()` - দুটি স্ট্রিংকে ছোট হাতের করুন
  2. `split("")` - ক্যারেক্টার অ্যারেতে ভাগ করুন
  3. `sort()` - অ্যালফাবেটিক্যালি সর্ট করুন
  4. `join("")` - আবার স্ট্রিংয়ে জড়ুন
  5. তুলনা করুন

পদ্ধতি ২: ফ্রিকোয়েন্সি ম্যাপ (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]`) ব্যবহার করুন
  1. জাভাস্ক্রিপ্টে দুটি অ্যারে জয়েন করা

  2. জাভাস্ক্রিপ্টে দুটি অ্যারে গুণ করা

  3. জাভাস্ক্রিপ্টে কেস-ইনসেনসিটিভ স্ট্রিং তুলনা

  4. জাভাস্ক্রিপ্টে একক ক্যারেক্টার অ্যারে দুটি তুলনা করে পার্থক্য বের করা