Letter Case Permutation

给一个字符串S, 返回把字符串中的字母随意大小写后, 所有的组合.

class Solution {
    Set<String> set = new HashSet<>();
    public List<String> letterCasePermutation(String S) {
        
        return letterCasePermutation(S, 0);
    }
    public List<String> letterCasePermutation(String S, int j) {
        List<String> res = new ArrayList<>();
        for(int i = j ; i < S.length(); i++){
            if(Character.isLetter(S.charAt(i))) {
                String low = S.substring(0,i) + Character.toLowerCase(S.charAt(i)) + S.substring(i+1, S.length());
                if (!set.contains(low)) {
                    set.add(low);
                    res.add(low);
                    res.addAll(letterCasePermutation(low, i + 1));
                }
               String high = S.substring(0,i) + Character.toUpperCase(S.charAt(i)) + S.substring(i+1, S.length());
                if(!set.contains(high)) {
                    set.add(high);
                    res.add(high);
                    res.addAll(letterCasePermutation(high, i + 1));
                }
            }
            else {
                if(!set.contains(S)) {
                    set.add(S);
                    res.add(S);
                }
            }
        }
        return res;
    }
}