Given an encoded string, return its decoded string.
The encoding rule is: k[encoded_string]
, where the encoded_string
inside the square brackets is being repeated exactly k
times. Note that k
is guaranteed to be a positive integer.
You may assume that the input string is always valid; there are no extra white spaces, square brackets are well-formed, etc. Furthermore, you may assume that the original data does not contain any digits and that digits are only for those repeat numbers, k
. For example, there will not be input like 3a
or 2[4]
.
The test cases are generated so that the length of the output will never exceed 105
.
Example 1:
Input: s = "3[a]2[bc]"
Output: "aaabcbc"
Example 2:
Input: s = "3[a2[c]]"
Output: "accaccacc"
Example 3:
Input: s = "2[abc]3[cd]ef"
Output: "abcabccdcdcdef"
Constraints:
1 <= s.length <= 30
s
consists of lowercase English letters, digits, and square brackets'[]'
.s
is guaranteed to be a valid input.- All the integers in
s
are in the range[1, 300]
.
Time Complexity: O(n)
Space Complexity: O(n)
How it works:
Initialize an empty stack and iterate over each character
i
in the input strings
.If the current character
i
is not equal to"]"
, it means it is a character that needs to be processed. In this case, the character is pushed onto the stack.If the current character
i
is equal to"]"
, it indicates that a substring needs to be repeated. The code enters an inner loop.Inside the inner loop, the code pops characters from the stack until it encounters the corresponding opening bracket
"["
. During this process, each character is concatenated with thestring
variable in reverse order. This step extracts the substring that needs to be repeated.After the inner loop, the opening bracket
"["
is popped from the stack to remove it.Next, another loop is executed while there are characters left in the stack and the top character is a digit. This loop extracts the number of times the substring should be repeated. Each digit character is concatenated with the
k
variable in reverse order.After the second loop, the code calculates the result of the repetition by multiplying the integer value of
k
with thestring
substring.The resulting repeated substring is pushed back onto the stack.
Finally, after iterating through all the characters in the input string
s
, the code joins the elements in the stack to form a single string and returns it as the decoded result.
Comments
Post a Comment