**魔法咒语组合**
2026 华为OD机试真题 7月8日华为OD上机新系统考试真题 100 分题型
点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解
题目描述
玩家收集了 N 个魔法咒语碎片,它们可以组合成强大的魔法阵。但并不是所有碎片都能使用——只含咒语中没有重复字母的碎片才是纯净的,可以激活。
请找出所有纯净碎片,输出由所有纯净碎片组成的所有魔法阵方案。
备注: 所有魔法咒语碎片互不重复
2026 华为OD机试真题 7月8日华为OD上机新系统考试真题 100 分题型
输入描述
- 魔法咒语碎片为一个字符串,仅由小写字母构成,没有分隔符,字符串长度不超过
26。 - 魔法咒语碎片数量 N 小于等于
6个。
输出描述
- 魔法阵方案,由所有纯净碎片组成的长字符串,每个纯净碎片的字符串之间以空格隔开(
" ")。 - 所有魔法阵方案按字母序排列输出。
示例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 的全排列
解题思路
核心思想
筛选出不包含重复字母的"纯净"碎片,然后对这些纯净碎片进行全排列,输出所有可能的魔法阵组合方案。
算法步骤
- 过滤纯净碎片:遍历所有碎片,筛选出字符串中所有字母都不重复的碎片
- 全排列生成:对纯净碎片列表使用
itertools.permutations生成所有排列 - 格式化输出:将每个排列用空格连接成字符串
- 字典序排序:对所有方案按字母序排序后返回
复杂度分析
- 时间复杂度:O(N! × L),其中 N 为纯净碎片数量,L 为平均字符串长度
- 空间复杂度:O(N! × L) 用于存储所有排
版权声明:
作者:魔改工程师
链接:https://www.sylblog.xin/archives/693
文章版权归作者所有,未经允许请勿转载。
THE END