ধরুন আমাদের দুটি স্ট্রিং s1 এবং s2 আছে যার আকার একই; আমাদের পরীক্ষা করতে হবে যে স্ট্রিং s1-এর কিছু পারমুটেশন স্ট্রিং s2-এর কিছু পারমুটেশন ভাঙতে পারে নাকি এর বিপরীতে। x[i]>=y[i] (বর্ণানুক্রমিক ক্রমে) 0 থেকে n-1 রেঞ্জের সকল i-এর জন্য একটি স্ট্রিং a স্ট্রিং b ভাঙতে পারে।
সুতরাং, যদি ইনপুটটি s1 =abc এবং s2 =xya এর মত হয়, তাহলে আউটপুটটি সত্য হবে। এর কারণ হল "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