Python如何生成字符串辅音元音交替的全长度去重排列?
实现辅音元音交替排列的生成方案
核心修改思路:在原有排列生成逻辑的基础上,新增交替规则校验逻辑,过滤不符合要求的排列即可。
完整实现代码
from itertools import permutations # 定义元音集合,可根据需求调整匹配范围 VOWELS = {'A', 'E', 'I', 'O', 'U'} def is_valid_perm(s): # 单字符排列天然符合规则 if len(s) == 1: return True # 校验所有相邻字符的元音/辅音属性是否不同 for i in range(len(s)-1): curr_is_vowel = s[i].upper() in VOWELS next_is_vowel = s[i+1].upper() in VOWELS if curr_is_vowel == next_is_vowel: return False return True def get_alt_perms(string_): # 生成所有长度的排列,去重后过滤符合规则的结果 all_perms = set(''.join(j) for i in range(1, len(string_) + 1) for j in permutations(string_, i)) return [p for p in all_perms if is_valid_perm(p)]
效果验证
调用get_alt_perms('BANANA')即可得到符合要求的输出:
- 合法排列会被保留:如
B、A、N、BA、AN、NA、BAN、BANA等 - 非法排列会被过滤:如
BN(辅音接辅音)、NB(辅音接辅音)、AA(元音接元音)等
可选优化说明
如果输入字符串包含小写字符无需额外修改,校验逻辑已经默认做了大小写不兼容处理;如果需要自定义元音范围,直接修改VOWELS集合即可。
内容的提问来源于stack exchange,提问作者banana_99
相关产品推荐
相关产品推荐

