LeetCode Problem

How to Solve Decode Ways

The Decode Ways problem uses dynamic programming to determine how many ways a string can be decoded into letters. Each number from 1 to 26 maps to a letter, but leading zeros or invalid mappings must be handled carefully. The problem requires an efficient way to count valid decoding methods based on these transitions.

GhostInterview Help

Need help with Decode Ways without spending extra time grinding it?

GhostInterview can read Decode Ways from a screenshot, generate the answer path, explain the complexity, and support solver-first interview workflows when you need direct help fast.

Screenshot Input

Capture the prompt fast instead of rewriting the problem by hand.

Answer + Complexity

Get the solution path, trade-offs, and complexity summary in one pass.

Stealth Workflow

Stay outside captured layers on supported screen-share workflows.

Problem #91State transition dynamic programmingReviewed 2026-03-08
Difficulty
Medium
Primary pattern
State transition dynamic programming
Answer-first problem summary
Step-by-step approach and complexity
GhostInterview solver workflow

The Decode Ways problem uses dynamic programming to determine how many ways a string can be decoded into letters. Each number from 1 to 26 maps to a letter, but leading zeros or invalid mappings must be handled carefully. The problem requires an efficient way to count valid decoding methods based on these transitions.

Problem Statement

Given a string s consisting of digits, determine how many ways the string can be decoded. Each number between 1 and 26 corresponds to a letter from 'A' to 'Z'. The string may contain leading zeros, and such cases will render the string undecodeable.

For example, '12' can be decoded as 'AB' or 'L', whereas '06' is invalid due to the leading zero. You need to count the number of possible decoding ways that can be obtained from the string s.

Examples

Example 1

Input: s = "12"

Output: 2

"12" could be decoded as "AB" (1 2) or "L" (12).

Example 2

Input: s = "226"

Output: 3

"226" could be decoded as "BZ" (2 26), "VF" (22 6), or "BBF" (2 2 6).

Example 3

Input: s = "06"

Output: 0

"06" cannot be mapped to "F" because of the leading zero ("6" is different from "06"). In this case, the string is not a valid encoding, so return 0.

Constraints

  • 1 <= s.length <= 100
  • s contains only digits and may contain leading zero(s).

Solution Approach

Dynamic Programming Initialization

Initialize two variables, dp[0] and dp[1], where dp[i] represents the number of ways to decode the substring s[0..i-1]. The base case is dp[0] = 1 (the empty string has one way to be decoded). The second base case is dp[1], which is 1 if s[0] is not '0' (since '0' has no valid mapping).

State Transition Logic

Iterate over the string s from index 2 onwards. For each character, check if the single digit at s[i-1] is a valid decoding (i.e., non-zero). If valid, add dp[i-1] to dp[i]. Then, check if the two digits at s[i-2..i-1] form a valid number between 10 and 26; if so, add dp[i-2] to dp[i].

Edge Case Handling

Handle special cases like leading zeros. If a character is '0' or any two-digit number is not between 10 and 26, ensure it is skipped or results in zero ways. This is critical to avoid counting invalid strings.

Complexity Analysis

MetricValue
TimeDepends on the final approach
SpaceDepends on the final approach

The time complexity is O(n), where n is the length of the string s, as we iterate over the string once and compute dp values for each character. The space complexity is O(n) due to the dp array storing values for each substring of s.

What Interviewers Usually Probe

  • Can the candidate identify the base cases for dynamic programming?
  • Do they account for edge cases like leading zeros or invalid two-digit numbers?
  • Can the candidate explain how state transitions work in dynamic programming for this problem?

Common Pitfalls or Variants

Common pitfalls

  • Forgetting to initialize the dp array correctly, especially handling dp[1] when s[0] is '0'.
  • Not checking if a two-digit number is valid before adding to dp[i].
  • Misunderstanding the significance of leading zeros and not handling them properly.

Follow-up variants

  • Considerations for decoding strings with additional constraints like very large numbers.
  • Alternative approaches using recursion with memoization instead of dynamic programming.
  • Variation where instead of decoding to letters, the numbers correspond to a different set of symbols or characters.

How GhostInterview Helps

  • GhostInterview helps by providing optimized solutions for common problems like Decode Ways, reducing time spent solving the problem manually.
  • Our step-by-step breakdown of dynamic programming approaches will ensure that the candidate thoroughly understands both the core problem and its edge cases.
  • GhostInterview identifies potential pitfalls in decoding problems, guiding candidates to avoid mistakes that could lead to incorrect solutions.

Topic Pages

FAQ

How does dynamic programming apply to the Decode Ways problem?

Dynamic programming is used to efficiently count the number of ways a string can be decoded by storing intermediate results in a dp array. This avoids recalculating the number of decodings for overlapping subproblems.

What is the time complexity of the Decode Ways problem?

The time complexity of this problem is O(n), where n is the length of the input string. The solution iterates over the string once, processing each character in constant time.

Can the Decode Ways problem have invalid strings?

Yes, a string with leading zeros or values outside the range of 1 to 26 cannot be decoded. These cases should be handled explicitly by returning 0 for invalid input.

What is the base case for dynamic programming in Decode Ways?

The base case for dynamic programming is dp[0] = 1, representing the number of ways to decode the empty string. dp[1] is 1 if the first character is not '0'.

Are there any alternate approaches to solve the Decode Ways problem?

Yes, instead of dynamic programming, recursion with memoization could also be used to solve the problem, though it might not be as efficient in terms of space.

GhostInterview Solver

Need direct help with Decode Ways instead of spending more time grinding it?

Download GhostInterview when you want a LeetCode solver, not another long practice loop. Capture Decode Ways from a screenshot, get the answer path and complexity, and use supported stealth workflows that stay outside captured layers.

Screenshot Input

Capture the prompt fast instead of rewriting the problem by hand.

Answer + Complexity

Get the solution path, trade-offs, and complexity summary in one pass.

Stealth Workflow

Stay outside captured layers on supported screen-share workflows.