//极简版递归
class Solution {
public:
    
    void solve(vector<string> &ans,string path,string remain){
        if(remain==""){
            ans.push_back(path);
        }
        else{
            bool b[256]={false};
            //这里就是定义了所有256个字符(实际上只需要到Z或者z就可以)
            string::iterator it;
            for(it=remain.begin();it!=remain.end();it++){
                if(!b[*it]){//剪枝
                    b[*it]=true;
                    char ch=*it;                    
                    remain.erase(it, it+1);
                    solve(ans,path+ch,remain);
                    remain.insert(it, ch);//恢复现场,用于回溯
                }
            }
        }
    }
    vector<string> Permutation(string str) {
        vector<string> ans;
        if(str=="") return ans;
        else{
            string path="";
            string remain=str;
            solve(ans,path,remain);
        }
        return ans;
    }
};