OD统一考试B卷:考古学家
题目
有一个考古学家发现一个石碑,但是很可惜 发现时其已经断成多段,原地发现 N
个断口整齐的石碑碎片,为了破解石碑内容
考古学家希望有程序能帮忙计算复原后的石碑文字组合数 ,你能帮忙吗
备注
如果存在石碑碎片内容完全相同,则由于碎片间的顺序不影响复原后的碑文内容,
仅相同碎片间的位置变化不影响组合
输入
第一行输入 N
,N
表示石碑碎片的个数
第二行依次输入石碑碎片上的文字内容 S
共有 N
组
输出
输出石碑文字的组合(按照升序排列),行尾无多余空格
示例一
输入
3
a b c
输出
abc
acb
bac
bca
cab
cba
说明
当石碑碎片的内容为 “a” ,“b”,“c” 时 则组合有
示例二
输入
3
a b a
输出
aab
aba
baa
示例三
输入
3
a b ab
输出
aabb
abab
abba
baab
baba
解题思路
- 对字符串
segment
进行分割,得到一个字符串列表segments
; - 使用
itertools.permutations
函数计算字符串列表segments
的全排列,并将结果存储在permutation_list
中; - 将
permutation_list
中的所有元素组合成一个字符串,并去重,得到新的字符串列表;
核心知识点
- 排列组合:使用了
itertools
中的permutations
函数,它可以生成字符串的所有排列。 - 集合:使用了
set
函数,将所有排列去重,只留下不同的排列。