394. Decode String
Medium
Input: s = "3[a]2[bc]"
Output: "aaabcbc"Input: s = "3[a2[c]]"
Output: "accaccacc"Input: s = "2[abc]3[cd]ef"
Output: "abcabccdcdcdef"Input: s = "abc3[cd]xyz"
Output: "abccdcdcdxyz"Last updated
Input: s = "3[a]2[bc]"
Output: "aaabcbc"Input: s = "3[a2[c]]"
Output: "accaccacc"Input: s = "2[abc]3[cd]ef"
Output: "abcabccdcdcdef"Input: s = "abc3[cd]xyz"
Output: "abccdcdcdxyz"Last updated
class Solution:
def decodeString(self, s: str) -> str:
# Let's first find out all string within different []
# This thing will help us in recursion calling
closingBracket = {}
stack = []
for index, char in enumerate(s):
if char == '[':
stack.append(index)
elif char == ']':
closingBracket[stack.pop()] = index
# Uncomment below line to se what we get from above code
# self.printBracketStrings(s, closingBracket)
return self.helper(s, 0, len(s)-1, closingBracket)
def printBracketStrings(self, s:str, closingBracket):
for key,value in closingBracket.items():
print(s[key+1:value])
def helper(self, s, left, right, closingBracket):
# left and right are boundaries of string within []
num = 0
result = []
while left <= right:
if s[left].isdigit():
num = num*10 + int(s[left])
elif s[left] == '[':
value = num*self.helper(s, left+1, closingBracket[left] - 1, closingBracket)
num = 0
result.append(value)
left = closingBracket[left]
else:
# Simple Characters
result.append(s[left])
left += 1
return "".join(result)