मान लीजिए हमारे पास दो स्ट्रिंग्स s1 और s2 हैं जिनका आकार समान है; हमें जांचना है कि क्या s1 का कोई क्रमचय s2 के किसी क्रमचय को ब्रेक कर सकता है या इसके विपरीत। एक स्ट्रिंग a, स्ट्रिंग b को ब्रेक कर सकती है यदि सभी i के लिए 0 से n-1 तक की रेंज में x[i] >= y[i] (वर्णमाला क्रम में) हो।
इसलिए, यदि इनपुट है s1 = abc और s2 = xya, तो आउटपुट true होगा। ऐसा इसलिए है क्योंकि "ayx" s2 का एक क्रमचय है जो "abc" को ब्रेक कर सकता है जो s1="abc" का एक क्रमचय है।
इसे हल करने के लिए, हम निम्न चरणों का पालन करेंगे:
एक फ़ंक्शन check() परिभाषित करें, जो s1, s2 लेगा,
i := 0 से शुरू करें, जब i < s1 का आकार, i बढ़ाते हुए, करें -
यदि s2[i] < s1[i], तो -
false लौटाएं
true लौटाएं
मुख्य विधि से, निम्न करें -
s1 ऐरे को सॉर्ट करें
s2 ऐरे को सॉर्ट करें
f3 := check(s2, s1)
f4 := check(s1, s2)
true लौटाएं यदि f3 true है या f4 true है, अन्यथा false
उदाहरण
बेहतर समझ के लिए निम्न कार्यान्वयन देखें:
#include <bits/stdc++.h> using namespace std; class Solution { public: bool check(string& s1, string& s2){ for (int i = 0; i < s1.size(); i++) { if (s2[i] < s1[i]) return false; } return true; } bool checkIfCanBreak(string s1, string s2) { sort(s1.begin(), s1.end()); sort(s2.begin(), s2.end()); bool f3 = check(s2, s1); bool f4 = check(s1, s2); return f3 || f4; } }; main(){ Solution ob; cout << (ob.checkIfCanBreak("abc", "xya")); }इनपुट
"abc", "xya"
आउटपुट
1