剑指offer-字符串的排列

2016/05/24 C和C++基础

题目描述

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

输入描述:

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

#include <iostream>
#include <string>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;

vector<string> Permutation(string str){
	int strlen=str.length();
	if(strlen==0){
		vector<string> temp;
		return temp;
	}
	set<string> s;
	s.insert(str);
	vector<int> a;
	for(int i=0;i<strlen;i++)
		a.push_back(i);
	while(next_permutation(a.begin(),a.end())){
		string gstr;
		for(int i=0;i<strlen;i++)
			gstr=gstr+str[a[i]];
		s.insert(gstr);
	}
	vector<string> vec(s.begin(),s.end());
	return vec;
}

int main(){
	string str="abc";
	Permutation(str);
	system("pause");
}

Search

    Post Directory