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

C++-এ দুটি শূন্যের মাঝপথে থাকা উপাদান সরান

এই আর্টিকেলে দেখানো হয়েছে কীভাবে শুধু '0' এবং '1' ধারণকারী একটি স্ট্রিং থেকে দুটি শূন্যের মাঝপথে থাকা উপাদানগুলো সরাতে হয়। ফাইনাল স্ট্রিং-এ কোনো '1' থাকবে না যেটি দুটি '0'-এর মাঝপথে আছে।

উদাহরণ

  • ইনপুট: "110010" → আউটপুট: "11000" (৪র্থ ইনডেক্সে 1 দুটি 0-এর মাঝপথে)
  • ইনপুট: "0010" → আউটপুট: "000" (২য় ইনডেক্সে 1 দুটি 0-এর মাঝপথে)

অ্যালগরিদম

  1. স্ট্রিং ট্রাভার্স করুন ইনডেক্স ১ থেকে length-2 পর্যন্ত।
  2. প্রতিটি ইনডেক্স i-এর জন্য চেক করুন: str[i-1] == '0' && str[i+1] == '0'।
  3. সত্য হলে str.erase(i, 1) দিয়ে সেটি মুছুন।
  4. ইনডেক্স সামঞ্জস্য রাখতে i-- করুন।
  5. স্ট্রিংয়ের নতুন দৈর্ঘ্য আপডেট করুন।

C++ প্রোগ্রাম

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

int main() {
    string str = "110010";
    int length = str.length();
    for (int i = 1; i < length - 1; i++) {
        if (str.at(i - 1) == '0' && str.at(i + 1) == '0') {
            str.erase(i, 1);
            i--;
            if (i > 0 && str.at(i - 1) == '0') i--;
            length = str.length();
        }
    }
    cout << "String after removing elements between the two zeros: " << str;
    return 0;
}

আউটপুট

String after removing elements between the two zeros: 1100

কোড ব্যাখ্যা

  • লুপ 1 থেকে length-2 পর্যন্ত চলে (প্রথম ও শেষ উপাদানের পাশে শূন্য নেই)।
  • str.at(i-1) এবং str.at(i+1) বাউন্ড চেক করে।
  • erase(i,1) একটি ক্যারেক্টার মুছে দেয়।
  • i-- দিয়ে পরবর্তী ক্যারেক্টার যেন স্কিপ না হয়।
  • দ্বিতীয় i-- চেন রি-অ্যাভ্যালুয়েশনের জন্য।

উপসংহার

এই পদ্ধতিতে O(n^2) টাইম লাগে (কারণ erase প্রতিবার O(n))। বড় স্ট্রিংয়ের জন্য stringBuilder বা নতুন স্ট্রিং বানাতে দ্রুত হবে।

  1. C++ দিয়ে দুটি অ্যারের ওভারল্যাপিং সম (Overlapping Sum) বের করা

  2. PL/SQL-এ স্ট্রিং রিভার্স করার পদ্ধতি C++-এ ব্যাখ্যা

  3. C++ দিয়ে একটি স্ট্রিংয়ের সাবস্ট্রিং-এর সংখ্যা বের করা

  4. C++-এ Nth সম দৈর্ঘ্যের প্যালিনড্রোম সংখ্যা বের করা