मान लीजिए कि हमारे पास दो तार s और t हैं, हमें यह जांचना है कि s को k चालों में t में बदला जा सकता है या कम। Ith मूव में आप ये ऑपरेशन कर सकते हैं।
-
s में कोई भी अनुक्रमणिका j (1 से शुरू करके) चुनें, जैसे कि 1 <=j <=s और j का आकार किसी भी पिछली चाल में नहीं चुना गया है, और उस अनुक्रमणिका पर वर्ण को कई बार स्थानांतरित करें।
-
जैसा है वैसा ही रहो।
यहां एक वर्ण को स्थानांतरित करने का अर्थ है इसे वर्णमाला के अगले अक्षर से बदलना (यदि अक्षर 'z' है, तो इसे 'a' में लपेटें)। इसलिए किसी कैरेक्टर को i बार शिफ्ट करना शिफ्ट ऑपरेशंस को i बार लागू करने का संकेत देता है।
इसलिए, यदि इनपुट s ="पॉपुट" t ="vwput" k =9 जैसा है, तो आउटपुट सही होगा क्योंकि i =6 पर, हम 'p' को 'v' में बदल सकते हैं, और i =8 पर, हम 'o' को 'w' में बदल सकते हैं।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे:
-
यदि s का आकार t के आकार के समान नहीं है, तो
-
झूठी वापसी
-
-
गिनती :=0 से 25 तक सभी के लिए एक सरणी होल्डिंग (न्यूनतम 1 और (k - i + 1 +(k - i)/26))
-
प्रत्येक वर्ण c1 के लिए s से और c2 t से, करें
-
अगर c1 c2 के समान नहीं है, तो
-
अंतर :=(c2 का ASCII - c1 + 26 का ASCII) मॉड 26
-
अगर गिनती[diff] <=0, तो
-
झूठी वापसी
-
-
गिनती[diff] :=count[diff] - 1
-
-
-
सही लौटें
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें
उदाहरण
def solve(s, t, k): if len(s) != len(t): return False count = [min(1, k - i + 1) + (k - i)//26 for i in range(26)] for c1, c2 in zip(s, t): if (c1 != c2): diff = (ord(c2) - ord(c1) + 26) % 26 if count[diff] <= 0: return False count[diff] -= 1 return True s = "poput" t = "vwput" k = 9 print(solve(s, t,k))
इनपुट
"poput","vwput",9
आउटपुट
True