字符串的排列

来源:互联网 发布:javaweb项目源码 编辑:程序博客网 时间:2024/06/07 14:17

输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
Note:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。

思路:全排列(需要交换的时候,判断之前是否已经交换过当前字符即可)

class Solution {public:     void help(string &str, int pos, set<string> &answer)     {         if(pos == str.length())         {             answer.insert(str);             return;         }         for(int i= pos; i< str.length(); ++i)         {             bool flag= false;             for(int j= i-1; j>= pos; --j)             {                 if(str[j] == str[i])                 {                     flag= true;                     break;                 }             }             if(flag)             {                 continue;             }             swap(str[i], str[pos]);             help(str, pos+1, answer);             swap(str[i], str[pos]);         }     }public:    vector<string> Permutation(string str)    {        vector<string> answer;        int len= str.length();        if(0 == len)        {            return answer;        }        std::set<string> helpAnswer;        sort(str.begin(), str.end());        help(str, 0, helpAnswer);        answer.insert(answer.end(), helpAnswer.begin(), helpAnswer.end());        return answer;    }};
原创粉丝点击