首页 > 代码库 > 剑指OFFER之字符串的排列

剑指OFFER之字符串的排列

题目描述: 

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

输入:

每个测试案例包括1行。

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

输出:

对应每组数据,按字典序输出所有排列。 

样例输入:
abcBCA
样例输出:
abcacbbacbcacabcbaABCACBBACBCACABCBA


Code:
#include <iostream>#include <cstdio>#include <vector>#include <algorithm>#include <string> using namespace std; const int arrSize=100;bool mark[arrSize];string str;vector<char> answer; void initMark(){    int len=str.size();    for(int i=0;i<len;++i)        mark[i]=true;} void DFS(vector<char> &answer){    if(answer.size()==str.size()){        vector<char>::iterator iter;        for(iter=answer.begin();iter!=answer.end();++iter)            printf("%c",*iter);        printf("\n");        return;    }    for(vector<char>::size_type cnt=0;cnt<str.size();++cnt){        if(mark[cnt]==true){            if(cnt>0&&str[cnt]==str[cnt-1]&&mark[cnt-1]==false)                continue;            mark[cnt]=false;            answer.push_back(str[cnt]);            DFS(answer);            mark[cnt]=true;            answer.pop_back();        }    }} int main(){    while(cin>>str){        sort(str.begin(),str.end());        initMark();        DFS(answer);    }    return 0;} /**************************************************************    Problem: 1369    User: lcyvino    Language: C++    Result: Accepted    Time:570 ms    Memory:1520 kb****************************************************************/

 

剑指OFFER之字符串的排列