मान लीजिए हमें दो स्ट्रिंग्स 'a' और 'b' दी गई हैं, कार्य यह ढूंढना है कि क्या हम स्ट्रिंग 'a' को ठीक दो स्थानों पर घुमाकर स्ट्रिंग 'b' प्राप्त कर सकते हैं, चाहे वह एंटीक्लॉकवाइज या क्लॉकवाइज दिशा में हो। उदाहरण के लिए,
इनपुट-1 -
a = google b = legoog
आउटपुट -
True
व्याख्या - स्ट्रिंग 'google' को एंटीक्लॉकवाइज दिशा में दो स्थानों पर घुमाया जा सकता है, जिसके परिणामस्वरूप स्ट्रिंग 'legoog' प्राप्त होती है। इस प्रकार, हम True लौटाते हैं।
इनपुट-2 -
a = tuorialst b = tutorials
आउटपुट -
False
व्याख्या - स्ट्रिंग 'tuorialst' को किसी भी दिशा में दो स्थानों पर घुमाकर दूसरी स्ट्रिंग 'tutorials' प्राप्त नहीं की जा सकती। इस प्रकार, हम False लौटाते हैं।
इस प्रॉब्लम को हल करने के लिए उपयोग किया गया दृष्टिकोण
दिए गए दो स्ट्रिंग्स के लिए, इस दृष्टिकोण में हमारे दो मामले हैं -
एंटीक्लॉकवाइज रोटेशन के लिए
क्लॉकवाइज रोटेशन के लिए
पहले, यदि दोनों स्ट्रिंग्स की लंबाई अलग है, तो false लौटाएं। अन्यथा, यदि दोनों स्ट्रिंग्स की लंबाई दो से कम या बराबर है, तो हम True लौटाएंगे।
अन्य मामलों में, हम जांचेंगे कि क्या स्ट्रिंग 'b' का सबस्ट्रिंग एंटीक्लॉकवाइज दिशा में दो स्थान घुमाकर स्ट्रिंग 'a' के बराबर है, तो हम True लौटाएंगे। अन्यथा, False।
इसी तरह, यदि स्ट्रिंग 'b' को क्लॉकवाइज दिशा में दो स्थान घुमाकर, यह स्ट्रिंग 'a' के बराबर हो जाती है, तो True लौटाएं, अन्यथा, हम false लौटाएंगे।
दो इनपुट स्ट्रिंग्स 'a' और 'b' लें
एक बूलियन फंक्शन checkRotated(string a, string b) दो स्ट्रिंग्स 'a' और 'b' लेता है, और लौटाता है कि क्या वे स्ट्रिंग 'b' को एंटीक्लॉकवाइज या क्लॉकवाइज दिशा में घुमाकर समान हैं।
स्ट्रिंग 'a' और स्ट्रिंग 'b' की लंबाई जांचें।
स्ट्रिंग 'b' का सबस्ट्रिंग ढूंढें जिसे एंटीक्लॉकवाइज दो स्थान घुमाया गया हो।
अब जांचें कि क्या परिणामी सबस्ट्रिंग स्ट्रिंग 'a' के बराबर है या नहीं और यदि बराबर है तो true लौटाएं।
स्ट्रिंग 'b' का सबस्ट्रिंग ढूंढें जिसे क्लॉकवाइज दिशा में दो स्थान घुमाया गया हो।
अब जांचें कि क्या परिणामी सबस्ट्रिंग स्ट्रिंग 'a' के बराबर है या नहीं और यदि बराबर है तो true लौटाएं।
यदि स्ट्रिंग्स समान नहीं हैं, तो false लौटाएं।
उदाहरण
#include <bits/stdc++.h>
using namespace std;
bool checkRotated(string str1, string str2) {
if (str1.length() != str2.length())
return false;
if (str1.length() <= 2 || str2.length() <= 2)
return (str1 == str2);
string s1 = str2.substr(str2.size() - 2, 2);
string s2 = str2.substr(0, str2.size() - 2);
string s3 = s1 + s2;
if (s3 == str1)
return true;
string s4 = str2.substr(2, str2.size() - 2);
string s5 = str2.substr(0, 2);
string s6 = s4 + s5;
if (s6 == str1)
return true;
return false;
}
int main() {
string a = "google";
string b = "legoog";
cout << checkRotated(a, b) << endl;
return 0;
}
आउटपुट
यदि हम उपरोक्त कोड चलाएंगे, तो यह आउटपुट के रूप में प्रिंट करेगा,
1
चूंकि उपरोक्त कोड का आउटपुट "True" है, यह '1' प्रिंट करेगा।