# ---
# title: 784. Letter Case Permutation
# id: problem784
# author: Indigo
# date: 2021-01-28
# difficulty: Medium
# categories: Backtracking, Bit Manipulation
# link: <https://leetcode.com/problems/letter-case-permutation/description/>
# hidden: true
# ---
# 
# Given a string S, we can transform every letter individually to be lowercase
# or uppercase to create another string.
# 
# Return _a list of all possible strings we could create_. You can return the
# output in **any order**.
# 
# 
# 
# **Example 1:**
# 
#     
#     
#     Input: S = "a1b2"
#     Output: ["a1b2","a1B2","A1b2","A1B2"]
#     
# 
# **Example 2:**
# 
#     
#     
#     Input: S = "3z4"
#     Output: ["3z4","3Z4"]
#     
# 
# **Example 3:**
# 
#     
#     
#     Input: S = "12345"
#     Output: ["12345"]
#     
# 
# **Example 4:**
# 
#     
#     
#     Input: S = "0"
#     Output: ["0"]
#     
# 
# 
# 
# **Constraints:**
# 
#   * `S` will be a string with length between `1` and `12`.
#   * `S` will consist only of letters or digits.
# 
# 
## @lc code=start
using LeetCode

function letter_case_permutation(s::String)
    ans = [""]
    for i in s
        if isletter(i)
            tmp = ans[:]
            ans .*= lowercase(i)
            tmp .*= uppercase(i)
            append!(ans, tmp)
        else
            ans .*= i
        end
    end
    ans
end
## @lc code=end
