Decode Ways II LeetCode solution in Python
1# Runtime: 180 ms (Top 97.4%) | Memory: 21.20 MB (Top 53.7%)234class Solution:5def numDecodings(self, s: str):6if s[0] == "0":7return 08cMap = {9"0": 0,10"*": 9,11"**": 15,12"1*": 9,13"2*": 6,14} # {char(s) : multiplier} mapping15for i in range(1, 27):16cMap[str(i)] = 117for i in range(0, 7):18cMap["*" + str(i)] = 219for i in range(7, 10):20cMap["*" + str(i)] = 12122dp = [0] * (len(s) + 1)23dp[0], dp[-1] = cMap[s[0]], 12425for i in range(1, len(s)):26dp[i] += (27cMap[s[i]] * dp[i - 1] + cMap.get(s[i - 1 : i + 1], 0) * dp[i - 2]28) % (10**9 + 7)29if not dp[i]:30return 03132return dp[-2]