Skip to main content

Letter Case Permutation

Problem statement

Given a string s, you can transform every letter individually to be lowercase or uppercase to create another string.

Return a list of all possible strings we could create. Return the output in any order.

Example 1:

Input: s = "a1b2"Output: ["a1b2","a1B2","A1b2","A1B2"]

Example 2:

Input: s = "3z4"Output: ["3z4","3Z4"]

Constraints:

  • 1 <= s.length <= 12
  • s consists of lowercase English letters, uppercase English letters, and digits.

My solution

/**
* @param {string} s
* @return {string[]}
*/
var letterCasePermutation = function(s) {
const strs = new Set();

function traverse(currentIndex, str) {
if (currentIndex === s.length) {
!strs.has(str) && strs.add(str);
return;
}

const char = s.charAt(currentIndex);
if (typeof char === "number") {
traverse(currentIndex + 1, `${str}${char}`)
} else {
traverse(currentIndex + 1, `${str}${char.toUpperCase()}`)
traverse(currentIndex + 1, `${str}${char.toLowerCase()}`)
}
}

traverse(0, "")

return [...strs]
};