给定一个字符串 s ,通过将字符串 s 中的每个字母转变大小写,我们可以获得一个新的字符串。
返回 所有可能得到的字符串集合 。以 任意顺序 返回输出。
1、普通方法,迭代
class Solution {
public List<String> letterCasePermutation(String s) {
List<StringBuilder> list = new ArrayList<>();
list.add(new StringBuilder());
for(char c : s.toCharArray()){
int n = list.size();
if(Character.isLetter(c)){
for(int i = 0;i < n;i++){
list.add(new StringBuilder(list.get(i)));
list.get(i).append(Character.toLowerCase(c));
list.get(i+n).append(Character.toUpperCase(c));
}
}else{
// for(int i = 0;i < n;i++){
// list.get(i).append(c);
// }
for (StringBuilder stringBuilder : list) {
stringBuilder.append(c);
}
}
}
List<String> finallist = new ArrayList<>();
for(StringBuilder sb : list){
finallist.add(sb.toString());
}
return finallist;
}
}
2、回溯
class Solution {
List<String> res = new ArrayList<String>();
public List<String> letterCasePermutation(String s) {
char[] chs = s.toCharArray();
int n = chs.length;
dfs(chs,n,0);
return res;
}
public void dfs(char[] chs,int n,int begin){
res.add(new String(chs));
for(int i = begin;i < n;i++){
if(Character.isLetter(chs[i])){
//进行数据处理
char temp = chs[i];
chs[i] ^= 32;
//进入下一层决策树
dfs(chs,n,i+1);
//取消数据处理
chs[i] = temp;
}
}
}
}