একটি স্ট্রিং croakOfFrogs দেওয়া আছে যা একাধিক বাঙের "croak" মিশে আছে। একসাথে কতটুকু বাঙ ক্রোয়াক করেছে তার ন্যূনতম সংখ্যা বের করতে হবে। "croak" সিকোয়েন্স ঠিকমতো না হলে -1 রিটার্ন করব।
ইনপুট: "crcoakroak" → আউটপুট: 2
সমাধানের ধাপগুলো:
ফ্রিকোয়েন্সি ম্যাপ
mদিয়ে 'c','r','o','a','k' এর কাউন্ট রাখবপ্রতি ক্যারেক্টারের জন্য কাউন্ট আপডেট করব
ভ্যালিডিটি চেক:
m['c'] >= m['r'] >= m['o'] >= m['a'] >= m['k']এক্টিভ বাঙ
tempট্র্যাক করব: 'c' তে বাড়বে, 'k' তে কমবেret = max(ret, temp)শেষে সব কাউন্ট সমান কিনা চেক করব
উদাহরণ
নিচের কোডটি দেখুন −
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int minNumberOfFrogs(string s) {
map<char, int> m;
char ch[5] = {'c', 'r', 'o', 'a', 'k'};
int temp = 0, ret = 0;
for (auto& c : s) {
m[c]++;
int maxVal = m[ch[0]];
for (int i = 0; i < 5; i++) {
if (maxVal < m[ch[i]] || m[ch[i]] < 0)
return -1;
maxVal = m[ch[i]];
}
if (c == 'c')
temp++;
else if (c == 'k')
temp--;
ret = max(ret, temp);
}
for (int i = 1; i < 5; i++) {
if (m[ch[0]] != m[ch[i]])
return -1;
}
return ret;
}
};
int main() {
Solution ob;
cout << (ob.minNumberOfFrogs("crcoakroak"));
}
ইনপুট
"crcoakroak"
আউটপুট
2