0
点赞
收藏
分享

微信扫一扫

【递归/回溯】784. 字母大小写全排列

中间件小哥 2022-02-12 阅读 34
leetcode

题目

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

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

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

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

提示:

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

正解

链接

自解

class Solution {
public:


    vector<string> letterCasePermutation(string s) { //bfs
        vector<string> ans;
        queue<string> buf;
        buf.push(s);
        for(int i=0;i<s.size();i++) {
            if(isalpha(s[i])) {
                int bufsize = buf.size();
                for(int m=0;m<bufsize;m++) {
                    string tmp = buf.front();
                    buf.pop();

                    buf.push(tmp);
                    if(isupper(tmp[i])) {                     
                        tmp[i] += 'a' - 'A';
                        buf.push(tmp);
                    }
                    else {
                        tmp[i] -= 'a' - 'A';
                        buf.push(tmp);
                    }
                }
            }
        }

        while(!buf.empty()) {
            ans.push_back(buf.front());
            buf.pop();
        }

        return ans;

    }
};
举报

相关推荐

0 条评论