class Solution(object):
def letterCasePermutation(self, S):
#参数S为字符串
#返回字符串列表
# 利用二进制对应字符串。其中0表示大小写不变,1表示改变大小写
res = []
indices = []
indices = [i for i,_ in enumerate(S) if S[i].isalpha()]
for i in range(0, pow(2,len(indices))):
if i==0:
res.append(S)
else:
j=i;bpos=0;nsl=list(S)
while j>0:
ci2c = indices[bpos]
if j&1 and S[ci2c].islower():
nsl[ci2c]=S[ci2c].upper()
elif j&1 and S[ci2c].isupper():
nsl[ci2c]=S[ci2c].lower()
bpos+=1
j = j >> 1
res.append("".join(nsl))
return res
if __name__ == '__main__':
solution=Solution()
S = "a1b2"
print("输入为:",S)
print("输出为:",solution.letterCasePermutation(S))
进阶版
```python
"""
设计:Python程序设计
作者:初学者
日期:2022年 04月 13日
"""
# 例77
# 字母大小写转换
# 1.
# 问题描述
# 给定一个字符串S,可以将其中所有的字符任意切换大小写,得到一个新的字符串。
# 将所有可生成的新字符串以一个列表的形式输出。
# 2.
# 输入S = a1b2, 输出["a1b2", "a1B2", "A1b2", "A1B2"]。
# 3。代码实现
class Solution(object):
"""
参数S:字符串
返回字符串列表
利用二进制对应字符串,其中0表示大小写不变,1表示改变大小写
"""
def __init__(self, S):
self.S = S
def letter_toggle_case(self):
res = []
indices = [i for i, _ in enumerate(self.S) if S[i].isalpha()]
for i in range(0, pow(2, len(indices))):
if i == 0:
res.append(self.S)
else:
j = i;
bpos = 0;
nsl = list(S)
while j > 0:
ci2c = indices[bpos]
if j & 1 and self.S[ci2c].islower():
nsl[ci2c] = self.S[ci2c].upper()
elif j & 1 and self.S[ci2c].isupper():
nsl[ci2c] = self.S[ci2c].lower()
bpos += 1
j = j >> 1
res.append("".join(nsl))
return res
# 主函数
if __name__ == '__main__':
s = Solution("a1b2")
S = "a1b2"
print("输入:", S)
print("输出:", s.letter_toggle_case())