1032. 字母大小写转换

1032. 字母大小写转换

中文English

给定一个字符串S,我们可以将其中所有的字符任意切换大小写并得到一个新的字符串。将所有可生成的新字符串以一个列表的形式输出。

样例

样例 1:

输入: S = "a1b2"
输出: ["a1b2", "a1B2", "A1b2", "A1B2"]

样例 2:

输入: S = "3z4"
输出: ["3z4", "3Z4"]

样例 3:

输入: S = "12345"
输出: ["12345"]

注意事项

S是一个最多长度为12的字符串。
S只包含字母或者数字。

输入测试数据 (每行一个参数)如何理解测试数据?
class Solution:
    """
    @param S: a string
    @return: return a list of strings
    """
    '''
    大致思路:
    1.初始化res = [],循环字符串S,此时区分是字符还是数字
    如果是""的话,直接return ['']
    如果是数字的话,首个值的话,需要判断,直接append到res里面。否则需要循环res,依次对res里面的值重新赋值,res[j] = res[j] + column
    如果是字符的话,首个值的话,需要判断,append字符的upper()和lower()到res里面。否则的话,需要循环res,因为重新赋值会影响循环,每一次内部循环都需要加上当前
    字母的大写和小写进来。所以给定一个append_dic作为缓冲区,res内部循环不变,每一次循环都会append两个值到append_dic里面,最终将res重新赋值,即res =append_dic即可。
    '''
    def  letterCasePermutation(self,S):
        if S == '':
            return ['']
        res = []
        for column in S:
            ##如果是字符的话,需要区分大小写append,否则直接拼接
            if column.isalpha() == True:
                #如果是首个字符的话,不能循环res
                if len(res) == 0:
                    res.append(column.lower())
                    res.append(column.upper())
                else:
                    #只针对字符的情况,每次来都会置空,目的不影响res里面的循环
                    append_dic = []
                    for i in range(len(res)):
                        append_dic.append(res[i] + column.lower())
                        append_dic.append(res[i] + column.upper())
                    res = append_dic
            else:
                if len(res) == 0:
                    res.append(column)
                else:
                    #否则的话,就是数字,res需要重新赋值
                    for j in range(len(res)):
                        res[j] = res[j] + column
        return res

 

posted @ 2020-03-31 11:03  风不再来  阅读(355)  评论(0编辑  收藏  举报