class Solution {
public:
    vector<string> Permutation(string str) {
        vector<string> res;
        if (str.empty())
            return res;
        find(res, 0, str);
        set<string> sset(res.begin(), res.end());
        res.assign(sset.begin(), sset.end());
        return res;
    }

    void find(vector<string> &res, int count, string str){
        if (count == str.size())
            res.push_back(str);
        for (int i = count; i != str.size(); ++i){
            swap(str, i, count);
            find(res, count+1, str);
            swap(str, count, i);
        }
    }

    void swap(string &str, int a, int b){
        auto temp = str[a];
        str[a] = str[b];
        str[b] = temp;
    }
};

来一个超笨的方法,(之前参考LC中仿写过别人的,再写又不会了)
1、这是一个全排列问题,也就是排列组合中的排列问题,采用递归的思想:假设str中有9个字符,将每个字符放在第一位,然后递归,接着处理之后的8个字符,这样就可以考虑了所有的情况了。
2、因为题中说字符可能有重复,没想出什么好办法,用set中转一下。