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"]
class Solution { public List<String> letterCasePermutation(String S) { Queue<String> q = new LinkedList(); q.offer(S); for(int i = 0; i < S.length(); i++) { if(Character.isDigit(S.charAt(i))) continue; int size = q.size(); for(int j = 0; j < size; j++) { char[] ch = q.poll().toCharArray(); ch[i] = Character.toLowerCase(ch[i]); q.offer(new String(ch)); ch[i] = Character.toUpperCase(ch[i]); q.offer(new String(ch)); } } return new LinkedList(q); } }
A typical BFS, wtf am i doin?
对每一位判断
class Solution { public List<String> letterCasePermutation(String S) { List<String> res = new ArrayList(); if(S.length() == 0 || S == null) return res; help(res, 0, S.toCharArray()); return res; } public void help(List<String> res, int start, char[] ch) { if(start == ch.length) { res.add(new String(ch)); return; } if(ch[start] >= '0' && ch[start] <= '9') { help(res, start + 1, ch); return; } ch[start] = Character.toUpperCase(ch[start]); help(res, start + 1, ch); ch[start] = Character.toLowerCase(ch[start]); help(res, start + 1, ch); } }