এই আর্টিকেলে দেখানো হয়েছে কীভাবে শুধু '0' এবং '1' ধারণকারী একটি স্ট্রিং থেকে দুটি শূন্যের মাঝপথে থাকা উপাদানগুলো সরাতে হয়। ফাইনাল স্ট্রিং-এ কোনো '1' থাকবে না যেটি দুটি '0'-এর মাঝপথে আছে।
উদাহরণ
- ইনপুট:
"110010"→ আউটপুট:"11000"(৪র্থ ইনডেক্সে1দুটি0-এর মাঝপথে) - ইনপুট:
"0010"→ আউটপুট:"000"(২য় ইনডেক্সে1দুটি0-এর মাঝপথে)
অ্যালগরিদম
- স্ট্রিং ট্রাভার্স করুন ইনডেক্স ১ থেকে
length-2পর্যন্ত। - প্রতিটি ইনডেক্স
i-এর জন্য চেক করুন:str[i-1] == '0' && str[i+1] == '0'। - সত্য হলে
str.erase(i, 1)দিয়ে সেটি মুছুন। - ইনডেক্স সামঞ্জস্য রাখতে
i--করুন। - স্ট্রিংয়ের নতুন দৈর্ঘ্য আপডেট করুন।
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 বা নতুন স্ট্রিং বানাতে দ্রুত হবে।