public:
    set<string>ret;//用set来去重
    void dfs(string str,int k){//全排列
        if(k==str.size()){
            ret.insert(str);
        }
        // for循环和swap的含义:对于“ABC”,
        // 第一次'A' 与 'A'交换,字符串为"ABC", k为0, 相当于固定'A'
        // 第二次'A' 与 'B'交换,字符串为"BAC", k为0, 相当于固定'B'
        // 第三次'A' 与 'C'交换,字符串为"CBA", k为0, 相当于固定'C'
        for(int i=k;i<str.size();i++){
            swap(str[k],str[i]);
            dfs(str,k+1);
            swap(str[k],str[i]);//回溯
        }
    }
    vector<string> Permutation(string str) {
        dfs(str,0);
           //ret放到vector中
        return vector<string>({ret.begin(),ret.end()});
    }
};