这道题的解法和 #有重复项的数组全排列# 一模一样。。。

class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param str string字符串 
     * @return string字符串vector
     */
    vector<string> Permutation(string str) {
      if (str.empty()) {
        return std::vector<std::string>();
      }
      std::string tmp;
      std::vector<std::string> res;
      std::vector<int> visited(str.size(), 0);
      
      std::sort(str.begin(), str.end());
      
      recursion(res, str, tmp, visited);
      
      return res;
    }
  private:
    void recursion(std::vector<std::string> &res, std::string &str, std::string &tmp, std::vector<int> &visited) {
      if (tmp.size() == str.size()) {
        res.push_back(tmp);
        return ;
      }
      
      for (int i = 0; i < str.size(); ++i) {
        if (visited[i]) {
          continue;
        }
        //  这一步判断的前提是,序列已经是有序的
        if (i > 0 && str[i] == str[i - 1] && !visited[i - 1]) {
          continue;
        }
        
        visited[i] = 1;
        tmp.push_back(str[i]);
        recursion(res, str, tmp, visited);
        tmp.pop_back();
        visited[i] = 0;
      }
    }
};