Skip to main content

Command Palette

Search for a command to run...

Solving Leetcode Interviews in Seconds with AI: Decode Ways

Updated
3 min read

Introduction

In this blog post, we will explore how to solve the LeetCode problem "91" 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

You have intercepted a secret message encoded as a string of numbers. The message is decoded via the following mapping: "1" -> 'A' "2" -> 'B' ... "25" -> 'Y' "26" -> 'Z' However, while decoding the message, you realize that there are many different ways you can decode the message because some codes are contained in other codes ("2" and "5" vs "25"). For example, "11106" can be decoded into: "AAJF" with the grouping (1, 1, 10, 6) "KJF" with the grouping (11, 10, 6) The grouping (1, 11, 06) is invalid because "06" is not a valid code (only "6" is valid). Note: there may be strings that are impossible to decode. Given a string s containing only digits, return the number of ways to decode it. If the entire string cannot be decoded in any valid way, return 0. The test cases are generated so that the answer fits in a 32-bit integer. Example 1: Input: s = "12" Output: 2 Explanation: "12" could be decoded as "AB" (1 2) or "L" (12). Example 2: Input: s = "226" Output: 3 Explanation: "226" could be decoded as "BZ" (2 26), "VF" (22 6), or "BBF" (2 2 6). Example 3: Input: s = "06" Output: 0 Explanation: "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).

Explanation

Here's the breakdown of the solution:

  • Dynamic Programming: The problem exhibits overlapping subproblems, making dynamic programming a natural fit. We build up the solution from the end of the string to the beginning.
  • Base Cases: An empty string or a string starting with '0' has 0 ways to decode.
  • Recursive Relation: For each position, we consider decoding the single digit and the two digits (if possible) and add the number of ways from those subproblems.

  • Runtime Complexity: O(n), where n is the length of the string s.

  • Storage Complexity: O(n) due to the dp array.

Code

    def numDecodings(s: str) -> int:
    """
    Calculates the number of ways to decode a string of digits.

    Args:
        s: The string of digits to decode.

    Returns:
        The number of ways to decode the string.
    """

    n = len(s)
    dp = [0] * (n + 1)
    dp[0] = 1  # Empty string has one way to decode

    # If the first character is '0', there's no way to decode
    if s[0] == '0':
        return 0
    else:
        dp[1] = 1

    for i in range(2, n + 1):
        # Check single digit
        one_digit = int(s[i - 1])
        if 1 <= one_digit <= 9:
            dp[i] += dp[i - 1]

        # Check two digits
        two_digits = int(s[i - 2:i])
        if 10 <= two_digits <= 26:
            dp[i] += dp[i - 2]

    return dp[n]

More from this blog

C

Chatmagic blog

2894 posts