I am going through popular interview questions, and came up with the following solution to "Compute all permutations of a string."
def perm(s):
if len(s) == 0:
return ['']
else:
l = []
prev = perm(s[1:])
for old_str in prev:
for i in range(len(old_str)):
new_str = old_str[0:i] + s[0] + old_str[i:]
l.append(new_str)
return l
However, this solution returns []
on all input. If I make the string in the base case any string other than the empty string, the computation runs as expected. For example, with 'hi' in the base case, perm('abc')
returns
['abchi', 'bachi', 'bcahi', 'bchai', 'acbhi', 'cabhi', 'cbahi', 'cbhai', 'achbi', 'cahbi', 'chabi', 'chbai', 'abhci', 'bahci', 'bhaci', 'bhcai', 'ahbci', 'habci', 'hbaci', 'hbcai', 'ahcbi', 'hacbi', 'hcabi', 'hcbai']
As far as I can tell the algorithm for this code is correct. I am unsure of why the empty string isn't behaving as I anticipate, while other strings do. I have referenced this thread for better solutions, but I am still puzzled by why this one doesn't work.