题目:字母大小写全排列(中等)
思路:
从collections模块中导入deque(),存放待修改的排序,当前元素是数字的时候,之前的所有序列全部加上数字,并重新放入列表中。若当前元素是数字,则先怕他的小写加在所有序列后面,放入列表,再把他的大写加在所有序列后面,放入列表。如果当前遍历的字符是最后一个字符,就退出。
答案:
from collections import deque
class Solution(object):
def letterCasePermutation(self, s):
ans = [] # 最后输出的所有可能的字符串集合
q = deque(['']) # 创建一个双端队列
while q: # 如果队列不是空就循环判断
cur = q[0] # 游标是队列的长度
pos = len(cur) # 游标的长度正好是当前遍历到的字符所在位置
if pos == len(s): # 如果当前遍历的字符所在位置在最后一个就结束了
ans.append(cur) # 将最后的转换的大小写放入ans
q.popleft() # 弹出
else:
if s[pos].isalpha(): # 判断下标pos位置的当前字符是不是个字母
q.append(cur + s[pos].swapcase()) # 字符串拼接,将换大小写后的字符拼后面
q[0] += s[pos] # 字符串拼接,将原字符拼在后面
return ans
if __name__ == '__main__':
string = 'a1b2'
s = Solution()
ans = s.letterCasePermutation(string)
print(ans)