মান लीজিয়ে আমাদের কাছে একটি বাইনারি স্ট্রিং s আছে। এখন একটি অপারেশন বিবেচনা করুন যেখানে আমরা একটি বিট সিলেক্ট করি এবং তার মান ০ থেকে ১ বা ১ থেকে ০ ফ্লিপ করি। আমাদের এমন একটি স্ট্রিং পেতে হবে যাতে কোনো তিনটি সমান ক্রমাগত বিট নেই। সেজন্য ন্যূনতম কতগুলো অপারেশন দরকার তা বের করতে হবে।
উদাহরণস্বরূপ, ইনপুট যদি s = "10011100" হয়, তবে আউটপুট হবে ১, কারণ আমরা ৪ নম্বর ইনডেক্সের ১ কে ০ ফ্লিপ করে স্ট্রিং "10010100" বানাতে পারি যেখানে তিনটি ক্রমাগত সমান বিট নেই।
এটি সমাধান করার জন্য নিচের ধাপগুলো অনুসরণ করব:
- l := 0, count := 0
- যখন l < s-র সাইজ, লুপ চালান:
- r := l
- যখন r < s-র সাইজ এবং s[r] == s[l], লুপ চালান:
- r := r + 1
- count := count + floor((r - l) / 3)
- l := r
- count রিটার্ন করুন
উদাহরণ
নিচের ইমপ্লিমেন্টেশনটি দেখুন ভালো বুঝতে:
def solve(s):
l = 0
count = 0
while l < len(s):
r = l
while r < len(s) and s[r] == s[l]:
r += 1
count += (r - l) // 3
l = r
return count
s = "10011100"
print(solve(s))ইনপুট
"10011100"
আউটপুট
1