ধরুন আমাদের একটি বাইনারি স্ট্রিং আছে। আমরা নিচের প্রতিটি ক্রিয়াকলাপ যে কোনো সংখ্যক বার প্রয়োগ করতে পারি −
-
যদি সংখ্যাটিতে একটি সাবস্ট্রিং "00" থাকে, তাহলে আমরা এটিকে "10" দিয়ে প্রতিস্থাপন করতে পারি।
-
যদি সংখ্যাটিতে একটি সাবস্ট্রিং "10" থাকে, তাহলে আমরা এটিকে "01" দিয়ে প্রতিস্থাপন করতে পারি।
তারপরে আমাদের সর্বাধিক বাইনারি (এর সাংখ্যিক মানের উপর ভিত্তি করে) স্ট্রিংটি খুঁজে বের করতে হবে যা আমরা অনেক সংখ্যক অপারেশন পেতে পারি।
সুতরাং, যদি ইনপুটটি s ="001100" এর মত হয়, তাহলে আউটপুট হবে 111011, কারণ আমরা (00)1100 -> 101(10)0 -> 1010(10) -> 10(10)01 - এর মতো স্থানান্তর করতে পারি।> 100(10)1 -> 1(00)011 -> 111011।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- দৈর্ঘ্য :=s এর আকার
- শূন্য :=s-এ 0 এর সংখ্যা
- যদি শূন্য হয় <2, তাহলে
- রিটার্ন এস
- s :=s-এর বাম থেকে সমস্ত '1' মুছে ফেলুন
- leading_ones :=দৈর্ঘ্য - s এর আকার
- leading_ones :=leading_ones + zeros - 1
- trailing_ones :=length - leading_ones - 1
- উত্তর_বাম :=অগ্রণী_এক নম্বর 1s
- উত্তর_রাইট :=1s এর trailing_ones সংখ্যা
- উত্তর_বাম সমন্বিত 0 সমন্বিত উত্তর_ডান এবং প্রত্যাবর্তন করুন
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
def solve(s):
length = len(s)
zeros = s.count('0')
if zeros < 2:
return s
s = s.lstrip('1')
leading_ones = length - len(s)
leading_ones += zeros - 1
trailing_ones = length - leading_ones - 1
answer_left = '1' * leading_ones
answer_right = '1' * trailing_ones
return ''.join([answer_left, '0', answer_right])
s = "001100"
print(solve(s)) ইনপুট
"001100"
আউটপুট
111011