Leetcode 1188 Solution

This article provides solution to leetcode question 1188 (brace-expansion-ii)

https://leetcode.com/problems/brace-expansion-ii

Solution

class Solution: def braceExpansionII(self, expr: str) -> List[str]: i = 0
def generate(options_list, i, s, ans): if i == len(options_list): ans.add(s) return
for option in options_list[i]: generate(options_list, i + 1, s + option, ans)
def dfs(): nonlocal i nonlocal expr
if i == len(expr): return set()
options = [] while i < len(expr) and expr[i] not in ['}', ',']: if expr[i] == '{': i += 1
if expr[i] == '}': return set()
ans = set() while True: ans |= dfs()
if expr[i] == '}': i += 1 break elif expr[i] == ',': i += 1 else: raise Exception("Unexpected '{}'".format(expr[i]))
options.append(ans) elif 'a' <= expr[i] <= 'z': options.append({expr[i]}) i += 1 else: raise Exception("Unexpected '{}'".format(expr[i]))
ans = set() generate(options, 0, "", ans) return ans
return sorted(list(dfs()))