मान लीजिए हमारे पास दो तार हैं str1 तथा str2 । और उनकी लंबाई समान है, हमें यह जांचना होगा कि क्या हम शून्य या अधिक रूपांतरण करके str1 को str2 में बदल सकते हैं।
एक रूपांतरण में हम एक वर्ण की सभी घटनाओं को str1 में किसी अन्य लोअरकेस अंग्रेजी वर्ण में परिवर्तित कर सकते हैं। हमें यह जांचना होगा कि हम str1 को str2 में बदल सकते हैं या नहीं।
इसलिए, यदि इनपुट str1 ="aabcc", str2 ="ccdee" जैसा है, तो आउटपुट सत्य होगा, जैसे 'c' को 'e' में कनवर्ट करें, फिर 'b' से 'd' और फिर 'a' से 'c '। यहां हमें यह ध्यान रखना होगा कि रूपांतरणों का क्रम मायने रखता है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
फंक्शन कंप्रेस () को परिभाषित करें। इसमें s
. लगेगा -
n :=s का आकार
-
a :=एक नई सूची
-
गिनती :=1
-
1 से n की सीमा में i के लिए, करें
-
यदि s[i], s[i-1] के समान नहीं है, तो
-
-
गिनती:=1
-
-
अन्यथा,
-
गिनती :=गिनती + 1
-
-
-
-
वापसी एक
-
फ़ंक्शन को परिभाषित कर सकते हैं कन्वर्ट ()। इसमें str1, str2 लगेगा
-
ए:=संपीड़ित (str1)
-
बी:=सेक (str2)
-
n :=a का आकार, m :=b का आकार
-
d:=एक नया नक्शा
-
n :=न्यूनतम n, m
-
मैं :=0
-
जबकि i
-
अगर a[i]>b[i] शून्य नहीं है, तो
-
झूठी वापसी
-
-
मैं :=मैं + 1
-
-
str2 में प्रत्येक i के लिए, करें
-
अगर मैं d में नहीं हूं तो गैर-शून्य है, तो
-
d[i]:=1
-
-
-
वापसी सही है अगर 26 - d का आकार शून्य नहीं है या str1 str2 के समान है अन्यथा गलत है
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
class Solution(object): def compress(self,s): n = len(s) a = [] count = 1 for i in range(1,n): if s[i]!=s[i-1]: a.append(count) count=1 else: count+=1 a.append(count) return a def canConvert(self, str1, str2): a = self.compress(str1) b = self.compress(str2) n = len(a) m = len(b) d={} n = min(n,m) i = 0 while i<n: if a[i]>b[i]: return False i+=1 for i in str2: if i not in d: d[i]=1 return True if 26-len(d) or str1 == str2 else False ob = Solution() print(ob.canConvert("aabcc", "ccdee"))
इनपुट
"aabcc", "ccdee"
आउटपुट
True