Grokking the Coding Interview: Patterns for Coding Questions
Ask Author
Back to course home

0% completed

Vote For New Content
Solution: Decode String
Table of Contents

Contents are not accessible

Contents are not accessible

Contents are not accessible

Contents are not accessible

Contents are not accessible

Problem Statement

You have a string that represents encodings of substrings, where each encoding is of the form k[encoded_string], where k is a positive integer, and encoded_string is a string that contains letters only.

Your task is to decode this string by repeating the encoded_string k times and return it. It is given that k is always a positive integer.

Examples

    • Input: "3[a3[c]]"
    • Expected Output: "acccacccaccc"
    • Justification: The inner 3[c] is decoded as ccc, and then a is appended to the front, forming acc. This is then repeated 3 times to form acccacccaccc.
    • Input: "2[b3[d]]"
    • Expected Output: "bdddbddd"
    • Justification: The inner 3[d] is decoded as ddd, and then b is appended to the front, forming bddd. This is then repeated 2 times to form bddd bddd.
    • Input: "4[z]"
    • Expected Output: "zzzz"
    • Justification: The 4[z] is decoded as z repeated 4 times, forming zzzz.

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].

Solution

  • Understanding the Problem:

    • The problem involves decoding a string that contains patterns where a number is followed by a string in brackets.
    • The number indicates how many times the string in brackets should be repeated.
  • Approach:

    • Use a stack to keep track of the characters in the string.
    • Iterate through the string character by character.
    • When a number is encountered, calculate the complete number.
    • When an opening bracket [ is encountered, push the calculated number to the stack.
    • When a closing bracket ] is encountered, pop elements from the stack until a number is encountered and form the substring to be repeated.
    • Multiply the substring with the number and push the result back to the stack.
  • Handling Nested Brackets:

    • The stack will naturally handle nested brackets as it will continue popping elements until a number is encountered, forming the substring for the innermost bracket first.

Algorithm Walkthrough

  • Given Input: "3[a3[c]]"
  • Steps:
    • Initialize an empty stack.
    • Iterate through the string:
      • Encounter 3, push 3 to the stack.
      • Encounter [, do nothing.
      • Encounter a, push a to the stack.
      • Encounter 3, push 3 to the stack.
      • Encounter [, do nothing.
      • Encounter c, push c to the stack.
      • Encounter ], pop c and 3, form ccc and push it back to the stack.
      • Encounter ], pop ccc, a, and 3, form acccacccaccc and push it back to the stack.
    • The final stack contains acccacccaccc as the only element, which is the decoded string.

Code

Python3
Python3

. . . .

Complexity Analysis

  • Time Complexity: O(n), where n is the length of the input string. This is because we are iterating through the string once and processing each character.
  • Space Complexity: O(n), where n is the length of the input string. In the worst case, the stack will store all the characters of the input string.

.....

.....

.....

Like the course? Get enrolled and start learning!

Table of Contents

Contents are not accessible

Contents are not accessible

Contents are not accessible

Contents are not accessible

Contents are not accessible