Back to Month
HARD 25 Sep 2026 View on LeetCode

1096. Brace Expansion II

</> Solution

class Solution:
    def braceExpansionII(self, expression):
        self.s = expression
        self.i = 0

        result = self.parse()
        return sorted(result)

    def parse(self):
        result = {""}

        while self.i < len(self.s) and self.s[self.i] != '}':
            if self.s[self.i] == ',':
                break

            next_set = self.parse_single()
            result = {
                a + b
                for a in result
                for b in next_set
            }

        return result

    def parse_single(self):
        if self.s[self.i] == '{':
            self.i += 1
            result = set()

            while True:
                result.update(self.parse())

                if self.i < len(self.s) and self.s[self.i] == ',':
                    self.i += 1
                else:
                    break

            self.i += 1
            return result

        ch = self.s[self.i]
        self.i += 1
        return {ch}

TIME COMPLEXITY

O(N × R²)

SPACE COMPLEXITY

O(N × R)

TOPICS

Backtracking DFS String