class Solution {
public:
    vector<string> res;
    void dfs(string str, int x) { // str是排列的string,x是排列到的string的下标
        if(x == str.size() - 1) { // 遍历到最后一个数, 证明当前的string已经排列好
            res.push_back(str);
            return;
        }
        set<int> st; // char 可以转变为int set存储已经排列好的字符
        for(int i = x; i < str.size(); i++) {
            if(st.find(str[i]) != st.end()) // 剪枝操作,如果要排列的字符已经经过了排列,则不进行后续操作,进行剪枝
                continue;
            st.insert(str[i]);
            swap(str[x], str[i]);
            dfs(str, x + 1);
            swap(str[x], str[i]);
        }
    }
    vector<string> Permutation(string str) {
        dfs(str, 0);
        return res;
    }
};