剣指Offer-JZ 27-文字列の配列


タイトルの説明
文字列を入力し、その文字列のすべての配列を辞書順に印刷します.例えば文字列abcを入力すると、文字a,b,cで並べられるすべての文字列abc,acb,bac,bca,cab,cbaが印刷される.
問題を解く構想.
コードを参照
コード実装
class Solution {
     
public:
    vector<string> Permutation(string str) {
     
        vector<string> vecOfStr;
        if(str.empty()){
     
            return vecOfStr;
        }

        permutationHelper(str, vecOfStr, 0);
        
        sort(vecOfStr.begin(), vecOfStr.end());
        
        return vecOfStr;
    }
private:
    void swap(char& firstChar, char& secondChar){
     
        char tmp = firstChar;
        firstChar = secondChar;
        secondChar = tmp;
    }
    void permutationHelper(string str, vector<string>& vecOfStr, int begin){
     
        if(begin == str.size() - 1){
     
            if(find(vecOfStr.begin(), vecOfStr.end(), str) == vecOfStr.end()){
         // ?
                vecOfStr.push_back(str);
            }
        }
        else{
     
            for(int i = begin; i < str.size(); i++){
     
                swap(str[i], str[begin]);
                permutationHelper(str, vecOfStr, begin + 1);
                swap(str[i], str[begin]);
            }
        }
    }
};

実行結果
実行時間:5 msメモリ消費量:492 k