# # 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")