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#)计算字符串排列组合数 如"abcd"组合数为24 "aabb"组合数为6
- 剑指offer(24)-字符串的排列
- 24.字符串的排列
- Morse Code HNUST 1675(字符串全排列 递归解决 数组a[]与流输入的缓慢)
- 编写一个函数reverse_string(char * string) 实现:将参数字符串中的字符反向排列。 要求:不能使用C函数库中的字符串操作函数
- [转](阿里笔试)使用多线程和sleep函数生成字符串的伪随机排列
- P154、面试题28:字符串的排列
- 字符串倒序重新排列
- C基础/指定长度的字符串排列问题
- 字符串排列
- 剑指Offer(38)字符串的排列
- 编写一个方法,返回某字符串的所有排列组合。
- 剑指offer--面试题28:字符串的排列--Java实现
- 字符串全排列
- 字符串的全排列和组合算法
- 输入字符串,要求打印出所有字符排列的可能性
- 字符串的全排列和组合算法
- 【追求进步】字符串的排列
- 给定字符串的所有排列
- 字符串倒续排列的小程序