chore(Python): add find all permutations (#831)

* 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
pull/836/head
Andrés Martínez 2022-09-06 14:15:28 -04:00 committed by GitHub
parent 033fbe1503
commit e1bbc8b302
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 0 deletions

View File

@ -63,6 +63,7 @@
- [Unique Character](strings/unique_character.py) - [Unique Character](strings/unique_character.py)
- [Add String](strings/add_string.py) - [Add String](strings/add_string.py)
- [Rabin Karp algorithm](strings/rabin-karp-algorithm.py) - [Rabin Karp algorithm](strings/rabin-karp-algorithm.py)
- [Find all permutations](strings/find_all_permutations.py)
## Dynamic Programming ## Dynamic Programming
- [Print Fibonacci Series Up To N-th Term](dynamic_programming/fibonacci_series.py) - [Print Fibonacci Series Up To N-th Term](dynamic_programming/fibonacci_series.py)

View File

@ -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"