1
+ """
2
+ Leetcode 91. Decode ways
3
+ Method used : Memoization
4
+ """
5
+
6
+
7
+ def check (s ,mp ): # Checks if the string is a valid number in the map of numbers
8
+ return int (s in mp .keys ())
9
+ g_d = dict ()
10
+ class Solution ():
11
+ def helper (self ,s ,mp ):
12
+ if (s in g_d ):
13
+ return g_d [s ]
14
+ if (s [0 ] == '0' ): # if the string starts with 0, you cannot decode
15
+ return 0
16
+ if (len (s ) == 2 ): # len(s) == 2; two cases : checking two characters(s[0] && s[1]) seperately and the s[0:2]
17
+ return check (s [0 :2 ],mp ) + self .helper (s [1 :],mp )
18
+ if (len (s ) == 1 ):
19
+ return int (s in mp .keys ())
20
+ """
21
+ There are two cases
22
+ * Pick one character from the front
23
+ * Check if the charcater chosen is valid
24
+ * Pick two character from the front
25
+ * Check if the charcater chosen is valid
26
+ the conditions below help to validate the conditions mentioned here.
27
+ """
28
+ if not check (s [0 :2 ],mp ) and check (s [0 :1 ],mp ):
29
+ g_d [s ] = self .helper (s [1 :],mp )
30
+ return g_d [s ]
31
+ if not check (s [0 :1 ],mp ) and check (s [0 :2 ],mp ):
32
+ g_d [s ] = self .helper (s [2 :],mp )
33
+ return g_d [s ]
34
+ g_d [s ] = self .helper (s [1 :],mp ) + self .helper (s [2 :],mp )
35
+
36
+ return g_d [s ]
37
+ def numDecodings (self , s ):
38
+ """
39
+ :type s: str
40
+ :rtype: int
41
+ """
42
+ mp = dict ()
43
+ for i in range (1 ,27 ):
44
+ mp [str (i )] = chr (64 + i )
45
+ # print(mp)
46
+ return self .helper (s ,mp )
0 commit comments