मान लीजिए हमारे पास एक स्ट्रिंग s और एक संख्या k है। हमें s के सभी वर्णों का उपयोग करके k गैर-रिक्त पैलिंड्रोम स्ट्रिंग्स का निर्माण करना है। यहां हमें जांचना है कि क्या हम s के सभी वर्णों का उपयोग करके k पैलिंड्रोम स्ट्रिंग्स बना सकते हैं या नहीं।
उदाहरण के लिए, यदि इनपुट "true" है और k = 4, तो आउटपुट True होगा, क्योंकि एकमात्र संभावित समाधान प्रत्येक वर्ण को एक अलग स्ट्रिंग में रखना है।
हल करने की विधि
हम निम्न चरणों का पालन करेंगे:
- n = s का आकार।
- यदि n < k, तो false लौटाएं।
- यदि n == k, तो true लौटाएं।
- एक मैप परिभाषित करें और प्रत्येक वर्ण की आवृत्ति गिनें।
- odd = 0 प्रारंभ करें।
- मैप के प्रत्येक कुंजी-मान युग्म के लिए, odd में (मान AND 1) जोड़ें।
- यदि odd <= k तो true लौटाएं, अन्यथा false।
उदाहरण
बेहतर समझ के लिए निम्न कार्यान्वयन देखें:
#include <bits/stdc++.h> using namespace std; class Solution { public: bool canConstruct(string s, int k) { int n = s.size(); if (n < k) return false; if (n == k) return true; map<char, int> m; for (char c : s) m[c]++; int odd = 0; for (auto& it : m) { odd += (it.second & 1); } return odd <= k; } }; main(){ Solution ob; cout << (ob.canConstruct("true",4)); }
इनपुट
"true"
आउटपुट
1