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

解答一:

解答二:

解答三:用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()

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值