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

C++-এ সর্বাধিক দুটি ভিন্ন ক্যারেক্টারવાલা লংগেস্ট সাবস্ট্রিং


একটি স্ট্রিং s দেওয়া আছে। সর্বোচ্চ দৈর্ঘ্যের সাবস্ট্রিং t বের করতে হবে যাতে সেটিতে শুধু দুটি ভিন্ন ক্যারেক্টার থাকে।

যেমন, "eceba" হলে আউটপুট হবে 3, কারণ "ece" সাবস্ট্রিংটির দৈর্ঘ্য ৩ এবং এতে শুধু 'e' ও 'c' আছে।

সমাধানের ধাপগুলো (স্লাইডিং উইন্ডো):

  • lengthOfLongestSubstringKDistinct(s, k) ফাংশন লিখব

  • ans := 0, ম্যাপ m দিয়ে ক্যারেক্টার কাউন্ট রাখব

  • দুটি পয়েন্টার i, j দিয়ে উইন্ডো বড় করব

  • যখন ভিন্ন ক্যারেক্টারের সংখ্যা k এর চেয়ে বড় হয়, তবে i বাড়িয়ে উইন্ডো ছোট করব

  • ans = max(ans, j - i + 1) আপডেট করব

  • মেইন থেকে lengthOfLongestSubstringKDistinct(s, 2) কল করব

উদাহরণ

নিচের কোডটি দেখুন −

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

class Solution {
public:
    int lengthOfLongestSubstringKDistinct(string s, int k) {
        int ans = 0;
        unordered_map<char, int> 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 lengthOfLongestSubstringTwoDistinct(string s) {
        return lengthOfLongestSubstringKDistinct(s, 2);
    }
};

int main() {
    Solution ob;
    cout << (ob.lengthOfLongestSubstringTwoDistinct("eceba"));
}

ইনপুট

"eceba"

আউটপুট

3

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

  2. C++-এ স্ট্রিংয়ের সব স্বতন্ত্র অক্ষল ক्रमানুসারে প্রিন্ট করা

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

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