Formatted question description: https://leetcode.ca/all/784.html

Level

Easy

Description

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.

Examples:

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

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

Input: S = "12345"
Output: ["12345"]

Note:

  • S will be a string with length between 1 and 12.
  • S will consist only of letters or digits.

Solution

First obtain all the indices where the character is a letter. Next obtain all possible permutations using the idea of binary numbers, and for each permutation, set the letters to lowercase and uppercase accordingly, and add the string to the result list.

public class Letter_Case_Permutation {
    class Solution {

        public List<String> letterCasePermutation(String S) {
            if (S == null) {
                return new LinkedList<>();
            }

            List<String> res = new LinkedList<>();
            helper(S.toCharArray(), res, 0);
            return res;
        }

        public void helper(char[] chs, List<String> res, int pos) {
            if (pos == chs.length) {
                res.add(new String(chs));
                return;
            }
            if (chs[pos] >= '0' && chs[pos] <= '9') {
                helper(chs, res, pos + 1);
                return;
            }

            chs[pos] = Character.toLowerCase(chs[pos]);
            helper(chs, res, pos + 1);

            chs[pos] = Character.toUpperCase(chs[pos]);
            helper(chs, res, pos + 1);
        }
    }
}

All Problems

All Solutions