字母大小写全排列
描述 :
给定一个字符串 s
,通过将字符串 s
中的每个字母转变大小写,我们可以获得一个新的字符串。
返回 所有可能得到的字符串集合 。以 任意顺序 返回输出。
回文串 是正着读和反着读都一样的字符串。
题目 :
LeetCode 784. 字母大小写全排列 :
784. 字母大小写全排列
分析 :
如果本题去掉数字,只告诉你两个字母ab,让你每个字母变化大小写,那就是ab、Ab、aB、AB四种情况,题目比电话号码问题还简单,这里的数字就是干扰项,我们需要做的是过滤掉数字,只处理字母。另外还要添加个大小写转换的问题。如下图所示:
由于每个字符的大小写形式刚好差了32,因此在大小写装换时可以用c32 来进行转换和恢复 .
解析 :
class Solution {
List<String> list = new ArrayList<>();
public List<String> letterCasePermutation(String s) {
char[] arr = s.toCharArray();
dfs(arr,0);
return list;
}
public void dfs(char[] arr,int start){
while(start < arr.length && Character.isDigit(arr[start])){
start++;
}
if(start == arr.length){
list.add(new String(arr));
return;
}
arr[start] ^= 32;
dfs(arr,start + 1);
arr[start] ^= 32;
dfs(arr,start + 1);
}
}