একটি স্ট্রিং s দেওয়া আছে। আমাদের এমন সংলগ্ন সাবস্ট্রিং গণনা করতে হবে যাতে ০ এবং ১-এর সংখ্যা সমান থাকে এবং সাবস্ট্রিং-এ সব ০ এবং সব ১ folyamত থাকে। একই সাবস্ট্রিং একাধিকবার আসলে একাধিকবার গণনা হবে।
ইনপুট "11001100" হলে আউটপুট ৬। সাবস্ট্রিংগুলো: "1100", "10", "0011", "01", "1100", "10"।
সমাধানের ধাপসমূহ
- cnt অ্যারে (আকার ২) ০ দিয়ে ভরুন
- res := 0
- প্রতিটি i ∈ s এর জন্য:
- num := s[i] - '0'
- যদি i==0 বা s[i] != s[i-1] হয়, cnt[num] := 0
- cnt[num]++
- যদি cnt[num] <= cnt[1-num] হয়, res++
- res রিটার্ন করুন
উদাহরণ
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int countBinarySubstrings(string s) {
int cnt[2] = { 0 };
int res = 0;
for (int i = 0; i < s.length(); ++i) {
int num = s[i] - '0';
if (i == 0 || s[i] != s[i - 1])
cnt[num] = 0;
++cnt[num];
if (cnt[num] <= cnt[1 - num])
++res;
}
return res;
}
};
int main(){
Solution ob;
cout << (ob.countBinarySubstrings("11001100"));
}ইনপুট
"11001100"
আউটপুট
6