华为OD机试统一考试D卷C卷 - 字符串拼接 python
题目描述:构成指定长度字符串的个数 (本题分值100)
给定 M(0 < M ≤ 30)个字符(a-z),从中取出任意字符(每个字符只能用一次)拼接成长度为 N(0 < N ≤ 5)的字符串,
要求相同的字符不能相邻,计算出给定的字符列表能拼接出多少种满足条件的字符串,
输入非法或者无法拼接出满足条件的字符串则返回0。
输入描述
给定的字符列表和结果字符串长度,中间使用空格(" ")拼接
输出描述
满足条件的字符串个数
用例1
输入
aab 2
输出
2
说明
只能构成ab,ba。
用例2
输入
abc 2
输出
6
说明
可以构成:ab ac ba bc ca cb 。
Python
# 导入所需的模块
from collections import defaultdict
# 递归生成满足条件的不同字符串
def generate_distinct_strings(s, length, current, result, used):
# 当生成的字符串长度等于指定长度时,将其加入到结果集中
if len(current) == length:
result.add(current)
return
# 遍历字符串中的字符
for i in range(len(s)):
# 判断字符是否已经被使用,或者当前字符与前一个字符相同
if used[i] or (len(current) > 0 and cur
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
机试E卷D卷刷题日记 文章被收录于专栏
机试刷题记录