Solving Leetcode Interviews in Seconds with AI: Decode String
Introduction
In this blog post, we will explore how to solve the LeetCode problem "394" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like Chatmagic, we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.
Problem Statement
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].
Explanation
- Stack-based Decoding: The solution uses a stack to keep track of the counts and previously decoded strings. When encountering a '[', the current count and the decoded string are pushed onto the stack.
- Iterative Processing: The input string is processed character by character. Digits are accumulated to form the repeat count. Letters are appended to the current decoded string.
- Bracket Handling: When encountering a ']', the top of the stack (previous count and string) are popped. The current decoded string is repeated the popped count times and then appended to the popped string.
- Time Complexity: O(N), where N is the length of the decoded string. Space Complexity: O(M), where M is the length of the input string, due to the stack.
Code
def decodeString(s: str) -> str:
stack = []
curr_num = 0
curr_string = ""
for char in s:
if char.isdigit():
curr_num = curr_num * 10 + int(char)
elif char == '[':
stack.append((curr_num, curr_string))
curr_num = 0
curr_string = ""
elif char == ']':
num, prev_string = stack.pop()
curr_string = prev_string + curr_string * num
else:
curr_string += char
return curr_string