मान लीजिए कि हमारे पास दो संख्यात्मक स्ट्रिंग्स s और t हैं, हम निम्नलिखित ऑपरेशन का उपयोग करके स्ट्रिंग s से t में बदलना चाहते हैं:1. s में एक गैर-रिक्त सबस्ट्रिंग का चयन करें और इसे क्रमबद्ध करें ताकि वर्ण आरोही क्रम में हों। हमें यह जांचना होगा कि स्ट्रिंग s को स्ट्रिंग t में बदलना संभव है या नहीं।
इसलिए, यदि इनपुट s ="95643" t ="45963" जैसा है, तो आउटपुट True होगा क्योंकि हम "95643" -> "95463" -> "45963" का उपयोग करके s को t में बदल सकते हैं।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
स्थान :=एक नक्शा जहां डिफ़ॉल्ट मान प्रकार सूची है
-
मैं के लिए s के नीचे के आकार के आकार में 0 के लिए, करो
-
कुंजी :=s[i] पूर्णांक के रूप में
-
स्थानों के अंत में i डालें [कुंजी]
-
-
टी में प्रत्येक ई के लिए, करें
-
key :=e पूर्णांक के रूप में
-
यदि स्थान [कुंजी] खाली है, तो
-
झूठी वापसी
-
-
मैं :=स्थानों का अंतिम तत्व [कुंजी]
-
j के लिए 0 से key-1 की श्रेणी में, करें
-
यदि स्थान [j] गैर-रिक्त और स्थानों का अंतिम तत्व है [j]
-
झूठी वापसी
-
-
-
स्थानों से अंतिम तत्व हटाएं[कुंजी]
-
-
-
सही लौटें
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें
from collections import defaultdict def solve(s, t): places = defaultdict(list) for i in reversed(range(len(s))): key = int(s[i]) places[key].append(i) for e in t: key = int(e) if not places[key]: return False i = places[key][-1] for j in range(key): if places[j] and places[j][-1] < i: return False places[key].pop() return True s = "95643" t = "45963" print(solve(s, t))
इनपुट
"95643", "45963"
आउटपुट
True