leetcode 784. 字母大小写全排列

给定一个字符串S,通过将字符串S中的每个字母转变大小写,我们可以获得一个新的字符串。返回所有可能得到的字符串集合。

 

示例:
输入:S = "a1b2"
输出:["a1b2", "a1B2", "A1b2", "A1B2"]

输入:S = "3z4"
输出:["3z4", "3Z4"]

输入:S = "12345"
输出:["12345"]
 

提示:

S 的长度不超过12。
S 仅由数字和字母组成。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/letter-case-permutation
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

1:递归遍历字符串,若是遇到字母,则搜索两个方向,否则搜索一个方向。
2:并且char中大小写字母相差32,可直接用char运算来转换字符大小。

    private StringBuilder sb = new StringBuilder();
    private List<String> list = new ArrayList<>();
    private char[] arr;
    private int length;

    public List<String> letterCasePermutation(String s) {
        arr = s.toCharArray();
        length = s.length();
        find(0);
        return list;
    }

    private void find(int index) {
        if (length == index) {
            list.add(sb.toString());
            return;
        }
        char c = arr[index];
        sb.append(c);
        find(index + 1);
        if (c >= 'A' ) {
            sb.deleteCharAt(sb.length() - 1);
            sb.append((char) (c^32));
            find(index + 1);
        } 
        sb.deleteCharAt(sb.length() - 1);
    }

 

posted @ 2021-11-12 16:42  旺仔古李  阅读(47)  评论(0)    收藏  举报