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

C++-এ Longest Repeating Character Replacement

এই সমস্যায় একটি আপারকেস স্ট্রিং s এবং ইন্টিজার k দেওয়া থাকলে, সর্বোচ্চ kটি ক্যারেক্টার পরিবর্তন করে সবচেয়ে লম্বা সাবস্ট্রিং বানাতে হবে যাতে সেটির সব ক্যারেক্টার একই হয়।

উদাহরণ: s="ABAB", k=2 -> আউটপুট 4 (দুটি A কে B বা দুটি B কে A করে AAAA বা BBBB বানানো যায়)।

সমাধানের পদ্ধতি (Sliding Window)

  • উইন্ডো [left, right]।
  • count[26] = উইন্ডোতে প্রতিটি ক্যারেক্টারের ফ্রিকোয়েন্সি।
  • maxCount = উইন্ডোতে সর্বোচ্চ ফ্রিকোয়েন্সি।
  • উইন্ডো আকার - maxCount = পরিবর্তন করতে হবে এমন ক্যারেক্টারগুলো। এটি k-এর চেয়ে বড় হলে উইন্ডো সঙ্কুচিত করুন (left++)।
  • আনসার = max(আনসার, উইন্ডো আকার)।

উদাহরণ (C++)

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

class Solution {
public:
    int characterReplacement(string s, int k) {
        vector<int> count(26, 0);
        int left = 0, maxCount = 0, ans = 0;
        for (int right = 0; right < s.size(); right++) {
            count[s[right] - 'A']++;
            maxCount = max(maxCount, count[s[right] - 'A']);
            while (right - left + 1 - maxCount > k) {
                count[s[left] - 'A']--;
                left++;
            }
            ans = max(ans, right - left + 1);
        }
        return ans;
    }
};

int main() {
    Solution ob;
    cout << ob.characterReplacement("ABAB", 2);
    return 0;
}

ইনপুট

"ABAB" 2

আউটপুট

4
  1. স্ট্রিং-এ শেষ নন-রিপিটিং ক্যারেক্টার খুঁজে বের করা C++-তে

  2. C++-এ ক্যারেক্টার রিপ্লেসমেন্ট কোয়েরিয়ের পর প্যালিনড্রোম কিনা তা যাচাই করা

  3. C++-এ string at() ফাংশন: নির্দিষ্ট পজিশনের ক্যারেক্টার অ্যাক্সেস

  4. C++-এ strpbrk() ফাংশন