This is related to recursion. s is string 'abc'.
Return all permutations of s. So the desired output is: ['abc', 'acb', 'bac', 'bca', 'cab', 'cba']. But I am having trouble understanding the line in below code :
"for perm in permute(s[:i] + s[i+1:]):"
In the first print statement of"s[:i] + s[i+1:]", it printed out "c" as opposed to "bc". I thought that since index i started at 0 (where i = 0 and let = "a"), "s[:0] + s[o+1:]" would become s[1:]
which should return "bc" because "b" is at index 1 and c is the last letter. But the print statement returned "c" instead.
def permute(s):
out = []
# Base Case
if len(s) == 1:
out = [s]
else:
# For every letter in string
for i, let in enumerate(s):
# For every permutation resulting from Step 2 and 3 described above
for perm in permute(s[:i] + s[i+1:]):
print('s is ' + s)
print('s[:i] + s[i+1:] is ' + str(s[:i] + s[i+1:]))
print('i is ' + str(i))
print('Current letter is ' + let)
print('Current perm is ' + perm)
# Add it to output
out += [let + perm]
print('out is ' + str(out))
print()
return out
permute('abc')
s is bc
s[:i] + s[i+1:] is c
i is 0
Current letter is b
Current perm is c
out is ['bc']
s is bc
s[:i] + s[i+1:] is b
i is 1
Current letter is c
Current perm is b
out is ['bc', 'cb']
s is abc
s[:i] + s[i+1:] is bc
i is 0
Current letter is a
Current perm is bc
out is ['abc']
s is abc
s[:i] + s[i+1:] is bc
i is 0
Current letter is a
Current perm is cb
out is ['abc', 'acb']
s is ac
s[:i] + s[i+1:] is c
i is 0
Current letter is a
Current perm is c
out is ['ac']
s is ac
s[:i] + s[i+1:] is a
i is 1
Current letter is c
Current perm is a
out is ['ac', 'ca']
s is abc
s[:i] + s[i+1:] is ac
i is 1
Current letter is b
Current perm is ac
out is ['abc', 'acb', 'bac']
s is abc
s[:i] + s[i+1:] is ac
i is 1
Current letter is b
Current perm is ca
out is ['abc', 'acb', 'bac', 'bca']
s is ab
s[:i] + s[i+1:] is b
i is 0
Current letter is a
Current perm is b
out is ['ab']
s is ab
s[:i] + s[i+1:] is a
i is 1
Current letter is b
Current perm is a
out is ['ab', 'ba']
s is abc
s[:i] + s[i+1:] is ab
i is 2
Current letter is c
Current perm is ab
out is ['abc', 'acb', 'bac', 'bca', 'cab']
s is abc
s[:i] + s[i+1:] is ab
i is 2
Current letter is c
Current perm is ba
out is ['abc', 'acb', 'bac', 'bca', 'cab', 'cba']
s is bcwhich explains the rest. Reason for this output is that the inner for-loop recursively callspermutebefore the firstprintwiths == 'abc'happens.