E-784. Letter Case Permutation
这道题很interesting。
# experiments for deque
from collections import deque
a='123'
b = [a]
c = [[a]]
d = deque(a)
d_pop= d.popleft()
print(d)
print(d_pop)
print(type(d_pop))
e = deque(b)
e_pop= e.popleft()
print(e)
print(e_pop)
print(type(e_pop))
f = deque(c)
f_pop= f.popleft()
print(f)
print(f_pop)
print(type(f_pop))
# 感觉这是一个不容易引起误解的初始化方法
g = deque([])
g.append(a)
print(g)
g_pop= g.popleft()
print(g)
print(g_pop)
print(type(g_pop))
"""
deque(['2', '3'])
1
<type 'str'>
deque([])
123
<type 'str'>
deque([])
['123']
<type 'list'>
deque(['123'])
deque([])
123
<type 'str'>
"""
# BFS
# translated from java solution: https://leetcode.com/problems/letter-case-permutation/discuss/115485/Java-Easy-BFS-DFS-solution-with-explanation
# O(N*2^N), O(N*2^N)这个时间复杂度挺有意思,稍微不小心就会遗漏掉N.
from collections import deque
class Solution:
def letterCasePermutation(self, S: str) -> List[str]:
if not S:
return []
q = deque([S])
for i in range(len(S)):
if S[i].isdigit(): continue
cur_lvl_size = len(q)
for j in range(cur_lvl_size):
cur = q.popleft()
lower_case_str = cur[:i]+cur[i].lower()+cur[i+1:]
upper_case_str = cur[:i]+cur[i].upper()+cur[i+1:]
q.append(lower_case_str)
q.append(upper_case_str)
return list(q)
# DFS
class Solution:
def letterCasePermutation(self, S: str) -> List[str]:
def dfs(res, per_str, pos):
if pos >= len(per_str):
res.append(per_str)
elif per_str[pos].isdigit():
dfs(res, per_str, pos + 1)
else:
lower_case_str = per_str[:pos] + per_str[pos].lower() + per_str[pos+1:]
dfs(res, lower_case_str, pos + 1)
upper_case_str = per_str[:pos] + per_str[pos].upper() + per_str[pos+1:]
dfs(res, upper_case_str, pos + 1)
if not S:
return []
res = []
dfs(res, S, 0)
return res
Last updated
Was this helpful?