class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @return string字符串vector
     */
    vector<string> generatePermutation(string s) {
        unordered_set<string> set;
        vector<char> path(s.length());
        f2(s, 0, path, 0, set);
        return vector<string>(set.begin(), set.end());
    }

private:
    static void f2(const string& s, int i, vector<char>& path, int size, unordered_set<string>& set) {
        if (i == s.length()) {
            set.insert(string(path.begin(), path.begin() + size));
        } else {
            path[size] = s[i]; // Include current character
            f2(s, i + 1, path, size + 1, set); // Recur with the current character included
            f2(s, i + 1, path, size, set);     // Recur without the current character
        }
    }
};