一道按顺序排列组合题的几种解法

有一道面试题: 一个字符串"Yes", 用代码实现,输出其全部大小写组合,

比如说字符串"no"则输出['no', 'No', 'nO', 'NO']

想到了如下的几种解法:

方法一:借助于itertools.combinations

# coding = utf -8

def handle_string(src=""):
    from itertools import combinations
    res = ""
    for char in src:
        res += char.upper() + char.lower()
    words = list(combinations(list(res), 3))
    for i in range(len(src)):
        words = ["".join(item) for item in filter(lambda x:x[i].lower() == src[i].lower(), words)]
    return words

if __name__ == "__main__":
    print(handle_string("Yes"))

方法二:借助于random模块

# coding = utf -8

def handle_string(src=""):
    import random
    sl = src.lower()
    su = src.upper()
    sa = ["".join(list(x+y)) for (i, x) in enumerate(sl) for (j, y) in enumerate(su) if i == j]
    temp = []
    lens = 2 ** len(src)
    while True:
        item = "".join(random.choice(i) for i in sa)
        if item not in temp:
            temp.append(item)
        if len(temp) == lens:
            break
    return temp

if __name__ == "__main__":
    print(handle_string("Yes"))

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值