字符串的排列(全排列,包含重复的字符)

来源:互联网 发布:大数据医疗行业的应用 编辑:程序博客网 时间:2024/06/05 03:25

题目描述

输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。 
输入描述:

输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。

       void Per(int begin,string &str,vector<string> &a,int len){        if(str[begin] == '\0'){            a.push_back(str);            return;          }         char temp;         for(int i = begin;i <len;i++){             if(i == begin || str[i] != str[begin]){     //有重复的字符跳过不交换                temp = str[i];             str[i] = str[begin];             str[begin] = temp;             Per(begin+1,str,a,len);             temp = str[i];             str[i] = str[begin];             str[begin] = temp;             }         }    }public:    vector<string> Permutation(string str) {        int len = str.length();        vector<string> vec;        if(len == 0)            return vec;        Per(0,str,vec,len);        sort(vec.begin(),vec.end());//保证按字典序排列        return vec;    }


0 0