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

জাভাস্ক্রিপ্টে স্ট্রিংয়ে সর্বোচ্চ কমsekutিভ রিপিটিশন বালা ক্যারেক্টার খুঁজে বের করা

সমস্যা

একটি স্ট্রিং দেওয়া আছে। স্ট্রিংয়ে সবচেয়ে বেশি বার কমsekutিভ (consecutive) রিপিট হওয়া ক্যারেক্টারটি এবং তার কাউন্ট রিটার্ন করতে হবে। আউটপুট হবে দুটি উপাদানের অ্যারে: [ক্যারেক্টার, কাউন্ট]।

উদাহরণ কোড


const str = 'tdfdffddffsdsfffffsdsdsddddd';

const findConsecutiveCount = (str = '') => {
  let res = '';
  let count = 1;
  let arr = [];
  
  for (let i = 0; i < str.length; i++) {
    if (str[i] === str[i + 1]) {
      count++;
    } else {
      if (arr.every(v => v < count)) {
        res = str[i] + count;
      }
      arr.push(count);
      count = 1;
    }
  }
  
  return !res ? ['', 0] : [res.slice(0, 1), res.slice(1) * 1];
};

console.log(findConsecutiveCount(str));

আউটপুট

['f', 5]

ব্যাখ্যা (প্রদত্ত কোড)

  • count - বর্তমান ক্যারেক্টার কমsekutিভ কতবার রিপিট হয়েছে।
  • arr - সব গোষ্ঠীর কাউন্ট স্টোর করে।
  • arr.every(v => v < count) - বর্তমান কাউন্ট যদি সবগুলো পূর্বের কাউন্টের চেয়ে বড় হয়, তবে res আপডেট।
  • res ফরম্যাট: "f5" (ক্যারেক্টার + কাউন্ট)। শেষে পার্স করে আলাদা করা হয়।

স্পষ্টতর ও সঠিক সংস্করণ

প্রদত্ত কোডে কিছু লজিক্যাল সমস্যা আছে (যেমন: শেষ গোষ্ঠী হ্যান্ডলিং, টাই ব্রেকিং)। নিচে উন্নত সংস্করণ:


const findMaxConsecutive = (str) => {
  if (!str) return ['', 0];
  
  let maxChar = str[0];
  let maxCount = 1;
  let currentChar = str[0];
  let currentCount = 1;
  
  for (let i = 1; i < str.length; i++) {
    if (str[i] === currentChar) {
      currentCount++;
    } else {
      if (currentCount > maxCount) {
        maxCount = currentCount;
        maxChar = currentChar;
      }
      currentChar = str[i];
      currentCount = 1;
    }
  }
  
  // শেষ গোষ্ঠী চেক
  if (currentCount > maxCount) {
    maxCount = currentCount;
    maxChar = currentChar;
  }
  
  return [maxChar, maxCount];
};

console.log(findMaxConsecutive('tdfdffddffsdsfffffsdsdsddddd')); // ['f', 5]
console.log(findMaxConsecutive('aaabbb')); // ['a', 3] (প্রথমটি জিতেছে)
console.log(findMaxConsecutive('')); // ['', 0]

ফাংশনাল অ্যাপ্রোচ (Regex + Reduce)


const findMaxConsecutiveFunctional = (str) => {
  const groups = str.match(/(.)\1*/g) || []; // ['t', 'd', 'f', 'dd', 'ff', ...]
  return groups.reduce((max, group) => 
    group.length > max[1] ? [group[0], group.length] : max
  , ['', 0]);
};
  1. জাভাস্ক্রিপ্টে স্ট্রিংয়ে সর্বোচ্চ দীর্ঘ স্বরবর্ণ (vowel) সাবস্ট্রিং দৈর্ঘ্য

  2. জাভাস্ক্রিপ্টে স্ট্রিংয়ে একটি ক্যারেক্টারের সর্বোচ্চ কনsekutিভ আবির্ভাব গণনা

  3. জাভাস্ক্রিপ্টে ইংরেজি অক্ষরের ১-ভিত্তিক ইনডেক্স বের করা

  4. জাভাস্ক্রিপ্টে সেট (Set) এর সর্বোচ্চ দৈর্ঘ্য বের করা