您的位置:首页 > 其它

24.字符串的排列

2015-02-03 10:01 141 查看
题目:

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

输入:
每个测试案例包括1行。

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

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

样例输入:
abc BCA

样例输出:
abcacbbacbcacabcba ABCACBBACBCACABCBA


代码实现:


#include<iostream>
#include<string>
#include<algorithm>
#include<cstdio>

using namespace std;

bool next_permutation(string &s)
{
bool flag = false;
int len = s.length(), a, b;
if(len < 2) return false;
for(a=len-2; a>=0; --a)
if(s[a] < s[a+1])
{
flag = true;
break;
}
if(flag == false) return flag;
for(b=len-1; b>a; --b)
if(s[a] < s[b])
break;
swap(s[a], s[b]);
reverse(s.begin()+a+1, s.end());
return flag;
}

int main()
{
string s;
while(cin >> s)
{
sort(s.begin(), s.end());
do
{
printf("%s\n",s.c_str());
}
while(next_permutation(s));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: