मान लीजिए कि हमारे पास दो तार s1 और s2 हैं जिनका आकार समान है; हमें यह जांचना है कि क्या स्ट्रिंग s1 का कुछ क्रमपरिवर्तन स्ट्रिंग s2 के कुछ क्रमपरिवर्तन को तोड़ सकता है या इसके विपरीत। एक स्ट्रिंग a स्ट्रिंग b को तोड़ सकती है यदि x[i]>=y[i] (वर्णमाला क्रम में) सभी i के लिए 0 से n-1 तक।
इसलिए, यदि इनपुट s1 =abc और s2 =xy जैसा है, तो आउटपुट सत्य होगा। ऐसा इसलिए है क्योंकि "ayx" s2 का एक क्रमपरिवर्तन है जो "abc" स्ट्रिंग को तोड़ सकता है जो कि s1="abc" का क्रमपरिवर्तन है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
फ़ंक्शन चेक को परिभाषित करें (), इसमें s1, s2,
लगेगा -
इनिशियलाइज़ i :=0 के लिए, जब i
-
अगर s2[i]
-
झूठी वापसी
-
-
-
सही लौटें
-
मुख्य विधि से, निम्न कार्य करें -
-
सरणी s1 को सॉर्ट करें
-
सरणी s2 को सॉर्ट करें
-
f3 :=चेक(s2, s1)
-
f4 :=चेक(s1, s2)
-
सही लौटें या तो f3 सच है या f4 सच है, अन्यथा गलत है
उदाहरण
आइए एक बेहतर समझ प्राप्त करने के लिए निम्नलिखित कार्यान्वयन देखें -
#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