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

C++-এ সর্বোচ্চ K ভিন্ন ক্যারেক্টার সহ লংগেস্ট সাবস্ট্রিং (Longest Substring with At Most K Distinct Characters)


ধরি আমাদের একটি স্ট্রিং আছে; আমাদের সেই সাবস্ট্রিংটির দৈর্ঘ্য বের করতে হবে যাতে সেটিতে সর্বোচ্চ k টি ভিন্ন ক্যারেক্টার থাকে।

উদাহরণস্বরূপ, s = "eceba", k = 2 হলে আউটপুট হবে 3 কারণ T = "ece" যের দৈর্ঘ্য ৩।

সমাধানের ধাপসমূহ

  • ans := 0
  • একটি ম্যাপ m সংজ্ঞায়িত।
  • n := s.size()
  • x := 0
  • j = 0, i = 0; j < n; j++:
    • m[s[j]]++
    • যদি m[s[j]] == 1: x++
    • যখন x > k এবং i <= j:
      • m[s[i]]--
      • যদি m[s[i]] == 0: x--
      • i++
    • ans = max(ans, j - i + 1)
  • ans ফেরত।

প্রোগ্রাম উদাহরণ

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    int lengthOfLongestSubstringKDistinct(string s, int k) {
        int ans = 0;
        unordered_map m;
        int n = s.size();
        int x = 0;
        for (int j = 0, i = 0; j < n; j++) {
            m[s[j]]++;
            if (m[s[j]] == 1)
                x++;
            while (x > k && i <= j) {
                m[s[i]]--;
                if (m[s[i]] == 0)
                    x--;
                i++;
            }
            ans = max(ans, j - i + 1);
        }
        return ans;
    }
};

int main() {
    Solution ob;
    cout << (ob.lengthOfLongestSubstringKDistinct("eceba", 2));
}

ইনপুট

"eceba", 2

আউটপুট

3
  1. C++-এ সর্বোচ্চ পানি ধারণকারী কন্টেইনার (Container With Most Water)

  2. ক্যারেক্টার রিপিটিশন সহ স্ট্রিংয়ের সব পারমুটেশন প্রিন্ট করা C++-তে

  3. C++-এ সাবস্ট্রিংকে অন্য সাবস্ট্রিং দিয়ে রিপ্লেস করা

  4. পাইথনে k সংখ্যক স্বতন্ত্র ক্যারেক্টার ধারণকারী সর্বোচ্চ দৈর্ঘ্যের সাবস্ট্রিং খুঁজে বের করার প্রোগ্রাম