मान लीजिए हमारे पास एक स्ट्रिंग s है, यह एक लंबी स्ट्रिंग को एन्कोड कर रही है। s को n(t) के संयोजन के रूप में दर्शाया गया है, n(t) t के n बार संयोजन को दर्शाता है, और t या तो एक नियमित स्ट्रिंग है या यह पुनरावर्ती रूप से एक और एन्कोडेड स्ट्रिंग है। हमें s का डिकोडेड संस्करण ज्ञात करना है।
इसलिए, यदि इनपुट s = "3(pi)2(3(am))0(f)1(u)" जैसा है, तो आउटपुट "pipipiamamamamamamu" होगा।
हल करने के चरण
i := 0
parse() फ़ंक्शन परिभाषित करें। यह लेगा
ans := एक नई सूची
जब तक i < s का आकार और s[i], ")" के समान नहीं है, करें
यदि s[i] अंक है, तो
d := 0
जब तक s[i] अंक है, करें
d := 10 * d + s[i] का पूर्णांक भाग
i := i + 1
i := i + 1
segment := parse()
i := i + 1
segment को d बार ans में डालें
अन्यथा, s[i] को ans के अंत में डालें, i := i + 1
ans के आइटम्स को जोड़कर स्ट्रिंग लौटाएं
मुख्य विधि से parse() लौटाएं
उदाहरण
class Solution:
def solve(self, s):
i = 0
def parse():
nonlocal i
ans = []
while i < len(s) and s[i] != ")":
if s[i].isdigit():
d = 0
while s[i].isdigit():
d = 10 * d + int(s[i])
i += 1
i += 1
segment = parse()
i += 1
ans.extend(segment for _ in range(d))
else:
ans.append(s[i])
i += 1
return "".join(ans)
return parse()
ob = Solution()
s = "3(pi)2(3(am))0(f)1(u)"
print(ob.solve(s))
इनपुट
"3(pi)2(3(am))0(f)1(u)"
आउटपुट
pipipiamamamamamamu