**魔法咒语组合**

2026 华为OD机试真题 7月8日华为OD上机新系统考试真题 100 分题型

点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解

题目描述

玩家收集了 N 个魔法咒语碎片,它们可以组合成强大的魔法阵。但并不是所有碎片都能使用——只含咒语中没有重复字母的碎片才是纯净的,可以激活。

请找出所有纯净碎片,输出由所有纯净碎片组成的所有魔法阵方案。

备注: 所有魔法咒语碎片互不重复

2026 华为OD机试真题 7月8日华为OD上机新系统考试真题 100 分题型

输入描述

  1. 魔法咒语碎片为一个字符串,仅由小写字母构成,没有分隔符,字符串长度不超过 26
  2. 魔法咒语碎片数量 N 小于等于 6 个。

输出描述

  1. 魔法阵方案,由所有纯净碎片组成的长字符串,每个纯净碎片的字符串之间以空格隔开(" ")。
  2. 所有魔法阵方案按字母序排列输出。

示例1

输入

fire,water,earth

输出

["earth fire water","earth water fire","fire earth water","fire water earth","water earth fire","water fire earth"]

说明

示例2

输入

noon,sun,sky

输出

["sky sun","sun sky"]

说明

  • "noon":字母 'n' 重复,不纯净,舍弃
  • "sun":字母无重复,是纯净的
  • "sky":字母无重复,是纯净的
  • 可以形成一个 2!=2 的全排列

解题思路

核心思想

筛选出不包含重复字母的"纯净"碎片,然后对这些纯净碎片进行全排列,输出所有可能的魔法阵组合方案。

算法步骤

  1. 过滤纯净碎片:遍历所有碎片,筛选出字符串中所有字母都不重复的碎片
  2. 全排列生成:对纯净碎片列表使用 itertools.permutations 生成所有排列
  3. 格式化输出:将每个排列用空格连接成字符串
  4. 字典序排序:对所有方案按字母序排序后返回

复杂度分析

  • 时间复杂度:O(N! × L),其中 N 为纯净碎片数量,L 为平均字符串长度
  • 空间复杂度:O(N! × L) 用于存储所有排
THE END