cswork / libraryOpen practice workspace

Coding questions · C3 AI

Decompress an encoded string

Decompress an encoded string evaluates algorithm design, data structures, correctness, complexity, edge cases, and implementation details in a realistic interview setting. A strong answer states assumptions, handles edge cases, explains trade-offs, and shows how to validate the result clearly.

Given an encoded string, return its decoded (decompressed) form.

Use the following encoding rule:

  • A positive integer $k$ followed by a bracketed substring means the substring is repeated $k$ times.
  • Encodings can be nested.

Examples:

  • Input: "3[a]2[bc]" → Output: "aaabcbc"
  • Input: "3[a2[c]]" → Output: "accaccacc"
  • Input: "2[abc]3[cd]ef" → Output: "abcabccdcdcdef"

Assume:

  • The input is valid.
  • Digits only appear as repeat counts.

Return the decoded string.

What a Strong Answer Covers

  • A clear algorithm with the right data structures and enough pseudocode or code-level detail to implement it.
  • A correctness argument that explains why the algorithm covers all required cases.
  • Time and space complexity, plus at least one alternative approach when relevant.
  • Focused tests for normal cases, edge cases, and failure modes.

Follow-up Questions

  • How would the approach change if the input were streaming or too large for memory?
  • What invariants would you assert in production code?
  • Which tests would catch off-by-one, duplicate, or tie-breaking bugs?

Decompress Encoded String

Decode strings where k[substring] repeats substring k times, including nested encodings.

Hints

  1. Use stacks for repeat counts and previous strings.
  2. Build the current decoded segment until a closing bracket.

Solution

Solution Alignment

The prompt asks for an implementation-level answer. The safest way to present it is to define the state, maintain clear invariants, then walk through complexity and tests.

Problem Restatement

Given an encoded string, return its decoded (decompressed) form. Use the following encoding rule: - A positive integer $k$ followed by a bracketed substring means the substring is repeated $k$ times. - Encodings can be nested. Examples: - Input: "3[a]2[bc]" → Output: "aaabcbc" - Input: "3[a2[c]]" → Output: "accaccacc" - Input: "2[abc]3[cd]ef" → Output: "abcabccdcdcdef" Assume: - The input is valid. - Digits only appear as repeat counts. Return the decoded string.

Recommended Approach

Define a state that captures exactly the remaining decision information. Fill base cases first, then transition from smaller subproblems to larger ones. For games, use score difference or minimax DP; for counting, sum the valid predecessor states.

Correctness

The implementation should maintain an invariant after each loop or operation that directly matches the problem statement. At termination, that invariant implies the returned value has considered every valid candidate exactly once, or has preserved the required data-structure state after every API call.

Complexity

Typical DP time is number_of_states times transition_cost. Space can often be reduced when transitions only need the previous layer or diagonal.

Edge Cases and Tests

Empty input, length 1, invalid symbols, negative values where allowed, ties under optimal play, and large counts requiring modulo arithmetic.