1087. Brace Expansion π
Description
You are given a string s representing a list of words. Each letter in the word has one or more options.
- If there is one option, the letter is represented as is.
- If there is more than one option, then curly braces delimit the options. For example,
"{a,b,c}"represents options["a", "b", "c"].
For example, if s = "a{b,c}", the first character is always 'a', but the second character can be 'b' or 'c'. The original list is ["ab", "ac"].
Return all words that can be formed in this manner, sorted in lexicographical order.
Example 1:
Input: s = "{a,b}c{d,e}f"
Output: ["acdf","acef","bcdf","bcef"]
Example 2:
Input: s = "abcd" Output: ["abcd"]
Constraints:
1 <= s.length <= 50sconsists of curly brackets'{}', commas',', and lowercase English letters.sis guaranteed to be a valid input.- There are no nested curly brackets.
- All characters inside a pair of consecutive opening and ending curly brackets are different.
Solutions
Solution 1
Thinking
The expression is a concatenation of letter runs and a single level of brace alternatives. The expansion is a Cartesian product; backtracking plus a sort is enough.
convert splits on braces versus plain prefixes into lists of options. dfs picks one token from each list.
Leaves are collected and sorted lexicographically.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | |