字符串的排列
2017-07-17 16:11
141 查看
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
思路1:在stl中有排列的相关函数,可以直接来
vector<string> Permutation(string str) {
vector<string> answer;
if(str.empty())
return answer;
sort(str.begin(),str.end());
do{
answer.push_back(str);
}while(next_permutation(str.begin(),str.end()));
return answer;
}思路2:自己写全排列,然后排序
class Solution {
public:
vector<string> vec;
vector<string> Permutation(string str) {
PermutationHelp(str,0,str.size()-1);
sort(vec.begin(),vec.end());
return vec;
}
void PermutationHelp(string &str,int begin,int end)
{
if(begin == end)
{
if(find(vec.begin(),vec.end(),str)==vec.end())
vec.push_back(str);
}
else
{
for(int j=begin;j<=end;j++)
{
swap(str[j], str[begin]);
PermutationHelp(str,begin+1,end);
swap(str[j], str[begin]);
}
}
}
};
思路1:在stl中有排列的相关函数,可以直接来
vector<string> Permutation(string str) {
vector<string> answer;
if(str.empty())
return answer;
sort(str.begin(),str.end());
do{
answer.push_back(str);
}while(next_permutation(str.begin(),str.end()));
return answer;
}思路2:自己写全排列,然后排序
class Solution {
public:
vector<string> vec;
vector<string> Permutation(string str) {
PermutationHelp(str,0,str.size()-1);
sort(vec.begin(),vec.end());
return vec;
}
void PermutationHelp(string &str,int begin,int end)
{
if(begin == end)
{
if(find(vec.begin(),vec.end(),str)==vec.end())
vec.push_back(str);
}
else
{
for(int j=begin;j<=end;j++)
{
swap(str[j], str[begin]);
PermutationHelp(str,begin+1,end);
swap(str[j], str[begin]);
}
}
}
};
相关文章推荐
- JAVA代码—算法基础:找出字符串的所有排列
- 编写一个程序,输入一串不超过60个字符组成的且不包含换行符的字符串,将字符串中的A到Z的字母按英文字典字母顺序重新排列,排列后的单词的长度要与原始句子中的长度相同,并且要求只对A到Z的字母重新排列,其
- 字符串的升序降序排列
- 字符串的排列及组合算法
- 用递归的思想写编写一个函数reverse_string(char * string)实现字符串反向输出和反向排列
- 剑指Offer——面试题28:字符串的排列
- Morse Code HNUST 1675(字符串全排列 递归解决 数组a[]与流输入的缓慢)
- 字符串的排列 C++实现
- 24、字符串的排列
- 剑指offer_字符串---字符串的排列
- 剑指offer 字符串的排列
- 算法题0001-字符串重排列比较
- 字符串的排列
- poj 1146 ID Codes (字符串处理 生成排列组合 生成当前串的下一个字典序排列 【*模板】 )
- 字符串反向排列
- 1.6打印字符串排列
- [收集]字符串的全排列和组合
- 字符串的排列
- 字符串的全排列和组合算法
- 【前端笔试】JavaScript实现字符串全排列