From 4ef81a080d1fd0bafd8934fc2970d187c7ec2ba3 Mon Sep 17 00:00:00 2001 From: Vahagn Khachatryan Date: Mon, 29 May 2017 07:39:38 +0100 Subject: [PATCH] puzzle: Number of valid combinations of strings for given input. --- puzzles/interviews/training/num_valid_comb.py | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 puzzles/interviews/training/num_valid_comb.py diff --git a/puzzles/interviews/training/num_valid_comb.py b/puzzles/interviews/training/num_valid_comb.py new file mode 100644 index 0000000..cb77558 --- /dev/null +++ b/puzzles/interviews/training/num_valid_comb.py @@ -0,0 +1,35 @@ +# +# The number of valid combinations of a strings for given input array a[], +# where a=>1, z => 26, and 0 <= a[i] <= 9 +# {1,1,1} => {aaa, ak, ka} => 3 +# {1,1,0} => {aj} => 1 "/> +# + + +def valid_comb_aux(s, p, b, e, dyn): + if b in dyn: + print("dyn", p) + return dyn[b] + if b == e: + print("fin", p) + return 1 + count = 0 + for i in range(b+1, e+1): + if 0 < int(s[b:i]) and int(s[b:i]) <= (ord('z')-ord('a')+1): + p.extend(chr(ord('a')+int(s[b:i])-1)) + count = count + valid_comb_aux(s, p, i, e, dyn) + p.pop() + dyn[b] = count + return count + + +def valid_comb(s): + dyn = {} + return valid_comb_aux(s, [], 0, len(s), dyn) + + +if __name__ == "__main__": + print(valid_comb("111")) + print(valid_comb("110")) + print(valid_comb("22222")) + # valid_comb("12131456879234522222")