您的位置:首页 > 其它

24、字符串的排列

2018-03-29 11:27 218 查看

题目:

输入一个字符串,按字典序打印出该字符串中字符的所有排列,例如,输入字符串abc,打印出
abc,acb,bac,bca,cab,cba.

解法:

将字符串看成两部分,首字母和剩下的字符串。即str = str[0]+str[1,2..n-1]
然后利用递归,依次把首字母和后面的字母进行交换即可。
代码: vector<string> Permutation(string str) {
vector<string> res;
if(str.empty())
return res;
int n = str.length();
Permutation(str,res,0,n);
sort(res.begin(),res.end());//题目要求不能使用内置函数,可以自行写一个快排的字符串函数(str1+str2<str2+str1来代替数字比较中的大于和小于)
return res;
}
void Permutation(string &str,vector<string> &res,int begin,int n)
{
if(str[begin]=='\0') //递归结束条件
{
res.push_back(str);
return;
}
else
{
for(int i = begin;i<n;i++)
{
if(i!=begin && str[i]==str[begin])
continue;//重复字符串
swap(str[begin],str[i]);
Permutation(str,res,begin+1,n);
swap(str[begin],str[i]);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C 字符串