Skip to content

Commit

Permalink
chore(Python): add find all permutations (MakeContributions#831)
Browse files Browse the repository at this point in the history
* added find_all_permutations

* added test case for find_all_permutations

* updated README with find all permutations

* Added desc and time complexity of find_all_permutations

* PR comment spelling correction
  • Loading branch information
amartinez1224 authored Sep 6, 2022
1 parent 033fbe1 commit e1bbc8b
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 0 deletions.
1 change: 1 addition & 0 deletions algorithms/Python/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@
- [Unique Character](strings/unique_character.py)
- [Add String](strings/add_string.py)
- [Rabin Karp algorithm](strings/rabin-karp-algorithm.py)
- [Find all permutations](strings/find_all_permutations.py)

## Dynamic Programming
- [Print Fibonacci Series Up To N-th Term](dynamic_programming/fibonacci_series.py)
Expand Down
28 changes: 28 additions & 0 deletions algorithms/Python/strings/find_all_permutations.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
"""
Find all the permutations of a given string
Sample input: 'ABC'
Expected output: ['ABC', 'ACB', 'BAC', 'BCA', 'CAB', 'CBA']
Description: The algorithm is recursive. In each recursion, each element of the string (left) is removed and added to the beginning (head). This process is repeated until left is empty.
Time complexity: (n!)
"""

def permutation(head, left, permutations):
if len(left) == 0:
permutations.append(head)
else:
for i in range(len(left)):
permutation(head+left[i], left[:i]+left[i+1:], permutations)

def find_all_permutations(string):
permutations = []
permutation('', string, permutations)
return permutations

if __name__ == "__main__":
input = 'ABC'
output = find_all_permutations(input)

expected = ['ABC', 'ACB', 'BAC', 'BCA', 'CAB', 'CBA']
assert len(output) == len(expected), f"Expected 6 permutations, got: {len(expected)}"
for perm in expected:
assert perm in output, f"Expected permutation {perm} to be in output, missing"

0 comments on commit e1bbc8b

Please sign in to comment.