मान लीजिए हमारे पास दो स्ट्रिंग str1 और str2 हैं। और उनकी लंबाई समान है, हमें जांचना है कि क्या हम str1 को str2 में शून्य या अधिक रूपांतरण करके बदल सकते हैं।
एक रूपांतरण में हम str1 में एक वर्ण के सभी घटनाओं को किसी अन्य लोअरकेस अंग्रेजी वर्ण में बदल सकते हैं। हमें जांचना है कि क्या हम str1 को str2 में बदल सकते हैं या नहीं।
इसलिए, यदि इनपुट इस तरह है str1 = "aabcc", str2 = "ccdee", तो आउटपुट true होगा, क्योंकि 'c' को 'e' में बदलें फिर 'b' को 'd' में फिर 'a' को 'c' में। यहां हमें ध्यान रखना होगा कि रूपांतरण का क्रम मायने रखता है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
compress() फ़ंक्शन परिभाषित करें। यह s लेगा
n := s का आकार
a := एक नई सूची
count := 1
i को 1 से n तक की रेंज में, करें
यदि s[i], s[i-1] के समान नहीं है, तो
count को a के अंत में सम्मिलित करें
count := 1
अन्यथा,
count := count + 1
count को a के अंत में सम्मिलित करें
a लौटाएं
canConvert() फ़ंक्शन परिभाषित करें। यह str1, str2 लेगा
a := compress(str1)
b := compress(str2)
n := a का आकार, m := b का आकार
d := एक नया मैप
n := n, m का न्यूनतम
i := 0
जब तक i < n शून्येतर है, करें
यदि a[i] > b[i] शून्येतर है, तो
False लौटाएं
i := i + 1
str2 में प्रत्येक i के लिए, करें
यदि i, d में नहीं है, तो
d[i] := 1
True लौटाएं यदि 26 - d का आकार शून्येतर है या str1, str2 के समान है अन्यथा False
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
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