784 字母大小写全排列

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

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

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

输入:S = “12345”
输出:[“12345”]

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

方法1:
主要思路:解题链接汇总
(1)确定每个字母的大小写,来获得不同的字符串,和二进制的01表示对应,故考虑使用从0到最大值之间的各个数字的01排布,来确定对应位置的大小写字母;
(2)字母的个数是size,则对应的最大数为pow( 2,size )-1;

class Solution {
public:
    vector<string> letterCasePermutation(string S) {
        vector<pair<int,int>> mp;//获得字母的分布,first是字母的索引位置,second是对应的0到25的整数;
        for(int i=0;i<S.size();++i){
            if(S[i]>='a'&&S[i]<='z'){
                mp.push_back({i,S[i]-'a'});
            }
            else if(S[i]>='A'&&S[i]<='Z'){
                mp.push_back({i,S[i]-'A'});
            }
        }
        int end=pow(2,mp.size());//终止数字
        int index=0;//起始数字
        vector<string>res;//结果
        while(index<end){
            int cur_index=index;//当前数字
            ++index;
            for(pair<int,int>&it:mp){
                if(cur_index&1){//根据0,1分布确定各个字母的大小写
                    S[it.first]=it.second+'A';
                }
                else{
                    S[it.first]=it.second+'a';
                }
                cur_index>>=1;
            }
            res.push_back(S);//获得当前字符串
        }
        return res;
    }
};
上一篇:Python_DL_麦子学院(算法与应用_进阶)_10~


下一篇:784. 字母大小写全排列