Skip to content

Commit 9389da7

Browse files
authored
Create Brace Expansion.java
1 parent 8a945a7 commit 9389da7

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

Medium/Brace Expansion.java

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
class Solution {
2+
public String[] expand(String s) {
3+
List<List<String>> splits = parseInput(s);
4+
List<String> result = new ArrayList<>();
5+
StringBuilder sb = new StringBuilder();
6+
helper(splits, result, sb, 0);
7+
Collections.sort(result);
8+
String[] answer = new String[result.size()];
9+
for (int i = 0; i < result.size(); i++) {
10+
answer[i] = result.get(i);
11+
}
12+
return answer;
13+
}
14+
15+
private void helper(List<List<String>> splits, List<String> result, StringBuilder sb, int idx) {
16+
if (idx >= splits.size()) {
17+
if (sb.length() == splits.size()) {
18+
result.add(new StringBuilder(sb.toString()).toString());
19+
}
20+
} else {
21+
for (int i = idx; i < splits.size(); i++) {
22+
List<String> currentSplit = splits.get(i);
23+
for (String section : currentSplit) {
24+
sb.append(section);
25+
helper(splits, result, sb, i + 1);
26+
sb.deleteCharAt(sb.length() - 1);
27+
}
28+
}
29+
}
30+
}
31+
32+
private List<List<String>> parseInput(String s) {
33+
List<List<String>> splits = new ArrayList<>();
34+
int idx = 0;
35+
while (idx < s.length()) {
36+
if (s.charAt(idx) == '{') {
37+
int endIdx = s.indexOf('}', idx);
38+
String[] segements = s.substring(idx + 1, endIdx).split(",");
39+
splits.add(Arrays.asList(segements));
40+
idx = endIdx + 1;
41+
} else {
42+
splits.add(List.of(String.valueOf(s.charAt(idx++))));
43+
}
44+
}
45+
return splits;
46+
}
47+
}

0 commit comments

Comments
 (0)