Stack
Decode String
DESCRIPTION (inspired by Leetcode.com)
Given an encoded string s, write a function to return its decoded string.
The encoding rule is k[encoded_string], where the encoded_string inside the square brackets is repeated exactly k times. k is always a positive integer, and the brackets can be nested.
You can assume the input is always well-formed: there are no extra spaces, every square bracket is properly matched, and digits only ever appear to specify a repeat count k (so you won't see input like 3a or 2[4]).
Constraints:
- 1 <= s.length
- s consists of lowercase English letters, digits, and the square brackets [ and ].
- All repeat counts k are positive integers and may have more than one digit (for example, 10[a]).
- The input string is guaranteed to be valid.
Example 1:
Inputs:
s = "3[a]2[bc]"
Output:
"aaabcbc"
(Explanation: 3[a] decodes to "aaa" and 2[bc] decodes to "bcbc".)
Example 2:
Inputs:
s = "3[a2[c]]"
Output:
"accaccacc"
(Explanation: the inner 2[c] becomes "cc", so a2[c] is "acc", which is then repeated 3 times.)
Example 3:
Inputs:
s = "2[abc]3[cd]ef"
Output:
"abcabccdcdcdef"
Explanation
def decodeString(s):stack = []curr_string = ""current_number = 0for char in s:if char == "[":stack.append(curr_string)stack.append(current_number)curr_string = ""current_number = 0elif char == "]":num = stack.pop()prev_string = stack.pop()curr_string = prev_string + num * curr_stringelif char.isdigit():current_number = current_number * 10 + int(char)else:curr_string += charreturn curr_string
decode string
0 / 1
"[": Start of a new sequence
def decodeString(s):stack = []curr_string = ""current_number = 0for char in s:if char == "[":stack.append(curr_string)stack.append(current_number)curr_string = ""current_number = 0elif char == "]":num = stack.pop()prev_string = stack.pop()curr_string = prev_string + num * curr_stringelif char.isdigit():current_number = current_number * 10 + int(char)else:curr_string += charreturn curr_string
[
0 / 2
"]": End of a sequence
def decodeString(s):stack = []curr_string = ""current_number = 0for char in s:if char == "[":stack.append(curr_string)stack.append(current_number)curr_string = ""current_number = 0elif char == "]":num = stack.pop()prev_string = stack.pop()curr_string = prev_string + num * curr_stringelif char.isdigit():current_number = current_number * 10 + int(char)else:curr_string += charreturn curr_string
]
0 / 1
Digit
def decodeString(s):stack = []curr_string = ""current_number = 0for char in s:if char == "[":stack.append(curr_string)stack.append(current_number)curr_string = ""current_number = 0elif char == "]":num = stack.pop()prev_string = stack.pop()curr_string = prev_string + num * curr_stringelif char.isdigit():current_number = current_number * 10 + int(char)else:curr_string += charreturn curr_string
initialize variables
0 / 2
Letter
Solution
def decodeString(s):stack = []curr_string = ""current_number = 0for char in s:if char == "[":stack.append(curr_string)stack.append(current_number)curr_string = ""current_number = 0elif char == "]":num = stack.pop()prev_string = stack.pop()curr_string = prev_string + num * curr_stringelif char.isdigit():current_number = current_number * 10 + int(char)else:curr_string += charreturn curr_string
decode string
0 / 20
Complexity Analysis
Test Your Knowledge
Login to take the complexity quiz and track your progress
Complexity Analysis
Time Complexity: O(S) While we iterate through the input string once in O(n) time, constructing the repeated strings takes time proportional to the total number of characters in the final decoded result. The decoded string can be much larger than the input (e.g., '3[a2[c]]' decodes to 'accaccacc').
Space Complexity: O(S) We need to store the decoded string, and in the worst case, the stack can also grow proportional to the output size when dealing with nested sequences.
Unlock Premium Coding Content
On This Page
Your account is free and you can post anonymously if you choose.