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

বাইনারি স্ট্রিংকে অল্টারনেটিং করার জন্য ন্যূনতম সোয়াপ (C++)

সমস্যা বিবরণ

সমান দৈর্ঘ্যের একটি বাইনারি স্ট্রিং দেওয়া আছে যেখানে ০ এবং ১-এর সংখ্যা সমান। স্ট্রিংকে অল্টারনেটিং (কোনো দুটি רצeinander সমান না) করার জন্য ন্যূনতম কতগুলো সোয়াপ দরকার? উদাহরণ: "11110000" এর জন্য ২টি সোয়াপ।

অ্যালগরিদম

  • স্ট্রিং-এর অড্ড এবং ইভেন পজিশনে ০ এবং ১-এর সংখ্যা গণনা করুন (oddZeroCnt, evenZeroCnt, oddOneCnt, evenOneCnt)।
  • স্ট্রিং যদি ০ দিয়ে শুরু হয়, তবে সোয়াপ = min(evenZeroCnt, oddOneCnt)।
  • স্ট্রিং যদি ১ দিয়ে শুরু হয়, তবে সোয়াপ = min(evenOneCnt, oddZeroCnt)।
  • উত্তর = উপরের দুটির মিনিমাম।

উদাহরণ

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

int getMinSwaps(string str) {
    int oddZeroCnt = 0, evenZeroCnt = 0;
    int oddOneCnt = 0, evenOneCnt = 0;
    int n = str.length();
    for (int i = 0; i < n; ++i) {
        if (i % 2 == 0) {
            if (str[i] == '1') ++evenOneCnt;
            else ++evenZeroCnt;
        } else {
            if (str[i] == '1') ++oddOneCnt;
            else ++oddZeroCnt;
        }
    }
    int zeroSwapCnt = min(evenZeroCnt, oddOneCnt);
    int oneSwapCnt = min(evenOneCnt, oddZeroCnt);
    return min(zeroSwapCnt, oneSwapCnt);
}

int main() {
    string str = "11110000";
    cout << "Minimum swaps = " << getMinSwaps(str) << endl;
    return 0;
}

আউটপুট

Minimum swaps = 2
  1. C++ ব্যবহার করে বাইনারি স্ট্রিং S তৈরি করতে ন্যূনতম অপারেশন সংখ্যা

  2. C++ ব্যবহার করে N কে ২৫ দিয়ে বিভাজ্য করার ন্যূনতম মুভ সংখ্যা

  3. C++ ব্যবহার করে স্ট্রিংকে প্যালিনড্রোম করার ন্যূনতম ডিলিশন সংখ্যা

  4. C++-এ কো-প্রাইম অ্যারে बनाने জন্য ন্যূনতম ইনসারশন