class Solution {
public:
void dfs(string str, int begin, vector<string>& res)
{
if (str.empty())
return;
if (begin == str.size() - 1)
res.push_back(str);
for (int i = begin; i < str.size(); i++){
if (i != begin && str[i] == str[begin])
continue; //有与begin位重复的字符串不进行交换,跳过
swap(str[i], str[begin]);
//当i==begin时,也要遍历后面所有的字符串
//当i!=begin时,先交换,使第begin位能取到不同的可能字符,再遍历后面的字符
dfs(str, begin + 1, res);
swap(str[i], str[begin]);//为防止重复情况,还需要将begin位的元素重新换回来
}
}
vector<string> Permutation(string str) {
vector<string> res;
if (str.empty())
return res;
dfs(str, 0, res);
sort(res.begin(), res.end()); //按照字典输出
return res;
}
};