DFS+回溯:
先走到字符串的尾部,然后从后往前一点点的进行改变。
class Solution {
public List<String> letterCasePermutation(String S) {
List<String> list = new ArrayList<>();
char[] sb = S.toLowerCase().toCharArray();
h(list,0,sb);
return list;
}
public void h(List<String> list,int pos,char[] s){
if(pos==s.length){
list.add(new String(s));
return;
}
h(list,pos+1,s);
if(Character.isLetter(s[pos])){
s[pos] = Character.toUpperCase(s[pos]);
h(list,pos+1,s);
s[pos] = Character.toLowerCase(s[pos]);
}
}
}
BFS:
从头到尾的改变每一个字符,用队列来存储。
class Solution {
public List<String> letterCasePermutation(String S) {
Queue<String> q = new LinkedList<>();
q.add(S);
for(int i = 0;i < S.length();i++){
char tmp1 = S.charAt(i);
if(Character.isLetter(tmp1)){
int size = q.size();
for(int j=0;j<size;j++){
String tmp = q.poll();
q.add(tmp.substring(0,i)+Character.toUpperCase(tmp1)+tmp.substring(i+1));
q.add(tmp.substring(0,i)+Character.toLowerCase(tmp1)+tmp.substring(i+1));
}
}
}
return (List)q;
}
}