【剑指offer】字符串的排列
题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
思路
全排列,因为可能有重复的字符,因此需要将全排列中重复的排列去掉,并按字典序排序。
代码
class Solution {
public:
void dfs(int k,string s,vector<string> &vec,int len){
if(k == len){
vec.push_back(s);
}
for(int i = k; i < len; i++){
swap(s[i],s[k]);
dfs(k+1,s,vec,len);
//回溯
swap(s[i],s[k]);
}
}
vector<string> Permutation(string str) {
vector<string> vec;
int len = str.length();
if(len == 0){
return vec;
}
dfs(0,str,vec,len);
sort(vec.begin(),vec.end());//排序
auto it = unique(vec.begin(),vec.end());//删除重复元素
vec.resize(distance(vec.begin(),it));//重新赋值
return vec;
}
};