leetcode:1096. 花括号展开 II【力扣python重载加乘正则的巅峰之作】

题目截图

在这里插入图片描述

ac code

class Solution:
    def braceExpansionII(self, expression: str) -> List[str]:
        class S(set):
            # 重构加法取并集
            __add__ = lambda s, o: S(s | o)
            # 重构乘法取笛卡尔积
            __mul__ = lambda s, o: S(i + j for i, j in itertools.product(s, o))
        # (\W+):匹配一个或多个非字母进行切割,匹配到的非字母全部缓存
        # "\1"提取第一个位置的内容
        # 将逗号对应+号
        # 括号转换
        # 将两种乘法的形式的乘号显式表示
        expression = re.sub('(\w+)', r'S(["\1"])', expression).replace(',', '+').replace('{', '(').replace('}', ')').replace(')(',')*(').replace(')S',')*S')
        # 进行运算
        return sorted(eval(expression))



猜你喜欢

转载自blog.csdn.net/weixin_40986490/article/details/129377361