मान लीजिए कि हमारे पास दो तार a और b हैं जिनकी लंबाई समान है। हमें एक इंडेक्स का चयन करना है और उस चयनित इंडेक्स पर दोनों स्ट्रिंग्स को विभाजित करना है, a को दो स्ट्रिंग्स में विभाजित करना:a_pref और a_suff जहां a =a_pref | a_suff, और b को दो स्ट्रिंग्स में विभाजित करना:b_pref | b_suff (| concatenation ऑपरेटर है) जहां b =b_pref + b_suff. जांचें कि a_pref + b_suff या b_pref + a_suff एक पैलिंड्रोम बनाता है या नहीं। (कोई भी विभाजन एक खाली स्ट्रिंग हो सकता है)
इसलिए, यदि इनपुट a ="pqrst" b ="turqp" जैसा है, तो आउटपुट सही होगा क्योंकि हम ["pq", "rst"] और b जैसे ["tu", "rqp" को विभाजित कर सकते हैं। ], इसलिए अगर हम a_pref को b_suff के साथ जोड़ते हैं, तो हमें "pqrqp" मिलेगा जो एक पैलिंड्रोम है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
प्रत्येक जोड़ी (x, y) के लिए जोड़ियों की सूची से [(a, b), (b, a)], do
-
मैं :=0, j :=x - 1 का आकार
-
जबकि x[i] y[j] के समान है और i
0, करते हैं -
मैं :=मैं + 1
-
जे:=जे - 1
-
-
midx :=इंडेक्स i से j तक x का सबस्ट्रिंग
-
midy :=y को अनुक्रमणिका i से j में प्रतिस्थापित करना
-
अगर मिडक्स पैलिंड्रोम है या मिडी पैलिंड्रोम है, तो
-
सही लौटें
-
-
-
झूठी वापसी
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
def solve(a, b): for x, y in [[a, b], [b, a]]: i, j = 0, len(x) - 1 while x[i] == y[j] and i<len(x) and j>0: i += 1 j -= 1 midx = x[i:j+1] midy = y[i:j+1] if (midx == midx[::-1] or midy== midy[::-1]): return True return False a = "pqrst" b = "turqp" print(solve(a, b))
इनपुट
"pqrst", "turqp"
आउटपुट
True