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

C++-এ সাবস্ট্রিং-এর সর্বোচ্চ ঘটনা গণনা


মনে করুন একটি স্ট্রিং `s` আছে, আমাদের যেকোনো সাবস্ট্রিং-এর সর্বোচ্চ ঘটনার সংখ্যা বের করতে হবে যা নিচের নিয়মগুলো পূরণ করে -

  • সাবস্ট্রিং-এ ভিন্ন ক্যারেক্টারের সংখ্যা `maxLetters`-এর চেয়ে কম বা সমান হতে হবে।
  • সাবস্ট্রিং-এর আকার `minSize` এবং `maxSize`-এর মধ্যে (ইনক্লুসিভ) থাকতে হবে।

যদি ইনপুট হয় - "aababcaab", `maxLetters = 2`, `minSize = 3` এবং `maxSize = 4`, তবে আউটপুট হবে ২। সাবস্ট্রিং "aab"-এর মূল স্ট্রিং-এ ২টি ঘটনা আছে। এটি শর্তগুলো পূরণ করে, ২টি यুনিক অক্ষর এবং আকার ৩ (`minSize` এবং `maxSize`-এর মধ্যে)।

এটি সমাধান করতে আমরা নিচের ধাপগুলো অনুসরণ করব -

  • একটি ম্যাপ `m` সংজ্ঞায়িত করুন
  • `sz` = `minSize` থেকে `maxSize` পর্যন্ত
    • একটি ম্যাপ `x` তৈরি করুন, একটি `temp` তৈরি করুন, প্রাথমিকভাবে খালি
    • `i` = 0 থেকে `sz-1` পর্যন্ত
      • `x[s[i]]`-কে ১ বাড়ান
      • `temp := temp + s[i]`
    • `j` = 0, `i` = `sz` থেকে `s`-এর আকার - 1 পর্যন্ত, `i` এবং `j` বাড়ান
      • যদি `x`-এর আকার `<= maxLetters`, তবে `m[temp]`-কে ১ বাড়ান
      • `x[temp[0]]`-কে ১ কমান
      • যদি `x[temp[0]]` 0 হয়, তবে `temp[0]`-কে `x`- থেকে ডিলিট করুন
      • `temp`-এর প্রথম এবং দ্বিতীয় এলিমেন্ট ডিলিট করুন
      • `x[s[i]]`-কে ১ বাড়ান
      • `temp := temp + s[i]`
    • যদি `x`-এর আকার `<= maxLetters`, তবে `m[temp]`-কে ১ বাড়ান
  • `ans := 0`
  • যদি ম্যাপ `m`-এ কিছু এলিমেন্ট থাকে, তবে
    • `ans := max(ans, i`-তম কি-ভ্যালু পেয়ার-এর ভ্যালু)
  • `ans` রিটার্ন করুন

উদাহরণ (C++)

বेहतर বোঝার জন্য নিচের ইমপ্লিমেন্টেশনটি দেখুন -

#include <bits/stdc++.h> using namespace std; class Solution { public:    int maxFreq(string s, int maxLetters, int minSize, int maxSize) {       unordered_map <string ,int > m;       for(int sz = minSize; sz <= minSize; sz++){          unordered_map <char, int> x;          string temp ="";          for(int i = 0; i < sz; i++){             x[s[i]]++;             temp += s[i];          }          for(int j = 0, i = sz; i < s.size(); i++, j++){             if(x.size() <= maxLetters){                m[temp]++;             }             x[temp[0]]--;             if(x[temp[0]] == 0)x.erase(temp[0]);             temp.erase(temp.begin(),temp.begin() + 1);             x[s[i]]++;             temp += s[i];          }          if(x.size() <= maxLetters){             m[temp]++;          }       }       int ans = 0;       unordered_map <string ,int > :: iterator i = m.begin();       while(i != m.end()){          ans = max (ans, i->second);          i++;       }       return ans;    } }; main(){    Solution ob;    cout << (ob.maxFreq("aababcaab",2,3,4)); }

ইনপুট

"aababcaab" 2 3 4

আউটপুট

2

  1. Frugal সংখ্যা চেক করা (C++)

  2. C++ দিয়ে পেন্টাটপ (Pentatope) সংখ্যা বের করা

  3. C++ দিয়ে সর্বোচ্চ বেণ্ড (Bends) Barney পথের দৈর্ঘ্য বের করা

  4. C++-এ বাইপার্টাইট গ্রাফে সর্বোচ্চ এজ সংখ্যা