diff --git a/src/main/java/com/thealgorithms/Recursion/GenerateSubsets.java b/src/main/java/com/thealgorithms/Recursion/GenerateSubsets.java new file mode 100644 index 000000000000..417bf1307790 --- /dev/null +++ b/src/main/java/com/thealgorithms/Recursion/GenerateSubsets.java @@ -0,0 +1,36 @@ +package com.thealgorithms.Recursion; + +// program to find power set of a string + +import java.util.ArrayList; +import java.util.List; + +public final class GenerateSubsets { + + private GenerateSubsets() { + throw new UnsupportedOperationException("Utility class"); + } + + public static List subsetRecursion(String str) { + return doRecursion("", str); + } + + private static List doRecursion(String p, String up) { + if (up.isEmpty()) { + List list = new ArrayList<>(); + list.add(p); + return list; + } + + // Taking the character + char ch = up.charAt(0); + // Adding the character in the recursion + List left = doRecursion(p + ch, up.substring(1)); + // Not adding the character in the recursion + List right = doRecursion(p, up.substring(1)); + + left.addAll(right); + + return left; + } +} diff --git a/src/test/java/com/thealgorithms/Recursion/GenerateSubsetsTest.java b/src/test/java/com/thealgorithms/Recursion/GenerateSubsetsTest.java new file mode 100644 index 000000000000..d4bc7e488f80 --- /dev/null +++ b/src/test/java/com/thealgorithms/Recursion/GenerateSubsetsTest.java @@ -0,0 +1,36 @@ +package com.thealgorithms.Recursion; + +import static org.junit.jupiter.api.Assertions.assertArrayEquals; + +import java.util.List; +import org.junit.jupiter.api.Test; + +public final class GenerateSubsetsTest { + + @Test + void subsetRecursionTestOne() { + String str = "abc"; + String[] expected = new String[] {"abc", "ab", "ac", "a", "bc", "b", "c", ""}; + + List ans = GenerateSubsets.subsetRecursion(str); + assertArrayEquals(ans.toArray(), expected); + } + + @Test + void subsetRecursionTestTwo() { + String str = "cbf"; + String[] expected = new String[] {"cbf", "cb", "cf", "c", "bf", "b", "f", ""}; + + List ans = GenerateSubsets.subsetRecursion(str); + assertArrayEquals(ans.toArray(), expected); + } + + @Test + void subsetRecursionTestThree() { + String str = "aba"; + String[] expected = new String[] {"aba", "ab", "aa", "a", "ba", "b", "a", ""}; + + List ans = GenerateSubsets.subsetRecursion(str); + assertArrayEquals(ans.toArray(), expected); + } +}