শুধু 'Q', 'W', 'E', 'R' — এই চারটি ক্যারেক্টার ধারণকারী একটি স্ট্রিং দেওয়া আছে। একটি স্ট্রিং ব্যালেন্সড হবে যদি প্রতিটি ক্যারেক্টার ঠিক n/4 বার আসে, যেখানে n হলো স্ট্রিংয়ের দৈর্ঘ্য। এমন ন্যূনতম দৈর্ঘ্যের সাবস্ট্রিং খুঁজে বের করতে হবে যেটিকে যেকোনো অন্য সমান দৈর্ঘ্যের স্ট্রিং দিয়ে রিপ্লেস করলে মূল স্ট্রিংটি ব্যালেন্সড হয়ে যাবে। উদাহরণস্বরূপ, s = "QQWE" হলে আউটপুট ১, কারণ Q-কে R দিয়ে রিপ্লেস করলে "RQWE" ব্যালেন্সড হয়। স্ট্রিং ইতিমধ্যে ব্যালেন্সড থাকলে ০ ফেরত দিন।
সমাধানের ধাপগুলো:
mনামের একটি ম্যাপ বানান।- স্ট্রিংয়ের প্রতিটি ক্যারেক্টারের ফ্রিকোয়েন্সি
m-এ স্টোর করুন,n := s.size()। res := n, left := 0right = 0থেকেn-1পর্যন্ত:m[s[right]]১ কমান।left < nএবংm['Q'] <= n/4এবংm['W'] <= n/4এবংm['E'] <= n/4এবংm['R'] <= n/4रहने পর্যন্ত:res := min(res, right - left + 1)m[s[left]]১ বাড়ান।left১ বাড়ান।
resফেরত দিন।
নিচের ইমপ্লিমেন্টেশনটি দেখুন:
উদাহরণ
#include <bits/stdc++.h> using namespace std; class Solution { public: int balancedString(string s) { unordered_map <char, int> m; for(int i = 0;i<s.size();i++)m[s[i]]++; int n = s.size(); int res = n; int left = 0; for(int right = 0;right<n;right++){ m[s[right]]--; while(left<n && m['Q']<=n/4 && m['W'] <=n/4 && m['E'] <=n/4 && m['R']<=n/4){ res = min(res, right - left + 1); m[s[left]]+=1; left++; } } return res; } }; main(){ Solution ob; cout << (ob.balancedString("QQEQ")); }ইনপুট
"QQEQ"
আউটপুট
2