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 correctionpull/836/head
parent
033fbe1503
commit
e1bbc8b302
|
@ -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)
|
||||||
|
|
|
@ -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"
|
Loading…
Reference in New Issue