题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
解题思路:
这个方法得到的不是字典序,最后又排序。虽然过了但解法很不优。参考下面博客优化。
字符串全排列(可去重)
class Solution {
public:
vector<string> res;
vector<string> Permutation(string str) {
if(str.length()==0) return res;
PermutationCore(str,0);
sort(res.begin(),res.end());
return res;
}
//判断从子串的第一个字符串开始,直到k-1位置,看是否有重复的字符
int can_swap(string str, int index, int k){
int flag=1;
for (int i=index; i<k; i++) {
if (str[i]==str[k]) {
flag = 0;
break;
}
}
return flag;
}
void PermutationCore(string str,int index){
int len=str.length();
if(index==len-1){
res.push_back(str);
return;
}
for(int i=index;i<len;i++){
if(can_swap(str,index,i)){
char temp=str[index];
str[index]=str[i];
str[i]=temp;
PermutationCore(str,index+1);
temp=str[index];
str[index]=str[i];
str[i]=temp;
}
}
}
};