Skip to content

Commit a383ec1

Browse files
committed
[Feature] Added permutations and combinations of strings.
1 parent d4c4616 commit a383ec1

File tree

5 files changed

+47
-1
lines changed

5 files changed

+47
-1
lines changed

README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,4 +58,6 @@ Different algorithmic programs. Grouped by general topic.
5858
* [Factorial](algorithms/math/factorial.py)
5959

6060
#### String Based Algorithms
61-
* [Fizz Buzz](algorithms/string/fizz_buzz.py)
61+
* [Fizz Buzz](algorithms/string/fizz_buzz.py)
62+
* [Permutations](algorithms/string/permutations.py)
63+
* [Combinations](algorithms/string/combinations.py)

algorithms/string/combinations.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
def combinations_of_word(string: str):
2+
"""
3+
Find all combinations of letters in a word.
4+
5+
"""
6+
output = []
7+
for i in range(0,len(string)):
8+
output.append(string[i])
9+
for j in range(i+1, len(string)):
10+
output.append(string[i:j+1])
11+
12+
return output

algorithms/string/permutations.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
def permutations_of_word(string: str):
2+
"""
3+
Find all permutations of letters in a word.
4+
5+
"""
6+
def permute(current, remaining):
7+
if not remaining:
8+
permute.list.append(current)
9+
return
10+
for i in range(0,len(remaining)):
11+
remaining_minus = remaining[0:i] + remaining[i+1:]
12+
permute(current + remaining[i], remaining_minus)
13+
14+
permute.list = []
15+
permute('', list(string))
16+
return permute.list

tests/test_combinations_word.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import unittest
2+
from algorithms.string.combinations import combinations_of_word
3+
4+
class TestCombinationsWord(unittest.TestCase):
5+
6+
def test_combinations(self):
7+
self.assertEqual(['t', 'tw', 'two', 'w', 'wo', 'o'], combinations_of_word('two'))
8+
self.assertEqual(['1', '12', '123', '1234', '2', '23', '234', '3', '34', '4'], combinations_of_word('1234'))

tests/test_permutations_word.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import unittest
2+
from algorithms.string.permutations import permutations_of_word
3+
4+
class TestPermuteWord(unittest.TestCase):
5+
6+
def test_permutation_word(self):
7+
self.assertEqual(['two', 'tow', 'wto', 'wot', 'otw', 'owt'], permutations_of_word('two'))
8+
self.assertEqual(['123', '132', '213', '231', '312', '321'], permutations_of_word('123'))

0 commit comments

Comments
 (0)