【leetcode】784. 字母大小写全排列

本文深入探讨了字符串全排列算法的实现,特别是针对包含字母和数字的字符串,提供了两种不同的解决方案。通过递归和迭代的方法,详细解释了如何生成所有可能的大小写组合,为理解和实现字符串全排列提供了一个清晰的视角。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解答一:

解答二:

解答三:用46全排列的思路解

from string import ascii_lowercase

class Solution(object):
    def letterCasePermutation(self, S):
        """
        :type S: str
        :rtype: List[str]
        """
        rs = [S]
        def flip(ch):
            if ch in ascii_lowercase:
                return ch.upper()
            else:
                return ch.lower()
            # one line
            # return ch.upper() if ch in ascii_lowercase else ch.lower()

        for i in range(len(S)):
            if S[i].lower() not in ascii_lowercase: # 说明当前字母是数字
                continue
            else:
                ans = []
                for cur_s in rs:
                    # print(i,cur_s)
                    tmp = cur_s[:i]+flip(cur_s[i])+cur_s[i+1:]
                    ans.append(tmp)
                rs+=ans
                # print(rs)
                # ['1ab2', '1Ab2']
                # ['1ab2', '1Ab2', '1aB2', '1AB2']
        return rs



    def letterCasePermutation1(self, S):
        """
        :type S: str
        :rtype: List[str]
        """
        res = [""]
        print(len(res)) # 1
        for s in S:
            # print(s)
            if not s.isalpha():
                for i in range(len(res)):
                    # print(i) # 0 1 0 1 2 3
                    res[i] += s

            else:
                for i in range(len(res)):
                    # print(i) # 0 0 1
                    tmp = res[i]
                    res[i] += s.lower()
                    # print(i, res)
                    res.append(tmp + s.upper())
                    print(i, res)
        return res


def main():
    S = "1ab2"
    myResult = Solution()
    # 第一个字符串的排列之一是第二个字符串的子串
    print(myResult.letterCasePermutation(S))

if __name__ == '__main__':
    main()

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值