Given a string, write a function that uses recursion to output a list of all the possible permutations of that string.
For example, given s=’abc’ the function should return [‘abc’, ‘acb’, ‘bac’, ‘bca’, ‘cab’, ‘cba’]
Note: If a character is repeated, treat each occurence as distinct, for example an input of ‘xxx’ would return a list with 6 “versions” of ‘xxx’
Let’s think about what the steps we need to take here are:
def permute(s): output = [] if len(s) <= 1: output=[s] else: for i, let in enumerate(s): for perm in permute(s[:i]+s[i+1:]): output+=[let+perm] return output
permute('abc')
""" RUN THIS CELL TO TEST YOUR SOLUTION. """ from nose.tools import assert_equal class TestPerm(object): def test(self,solution): assert_equal(sorted(solution('abc')),sorted(['abc', 'acb', 'bac', 'bca', 'cab', 'cba'])) assert_equal(sorted(solution('dog')),sorted(['dog', 'dgo', 'odg', 'ogd', 'gdo', 'god'])) print ('All test cases passed.') # Run Tests t = TestPerm() t.test(permute)
All test cases passed.
Recommended: Introduction to Recursion
If you like my post please follow me to read my latest post on programming and technology.
Build an autocomplete system that, given a query string s and a set of possible…
Design a job scheduler that accepts a function f and an integer n. The scheduler…
Problem Statement (Asked By Airbnb) Given a list of integers, write a function to compute…
A unival tree (short for "universal value tree") is a tree in which all nodes…
Problem Statement (Asked By Facebook) Given the mapping a = 1, b = 2, ...,…
An XOR-linked list is a memory-efficient version of a doubly linked list. Instead of each…