字符串的排列
利用set,去除重复;
class Solution { vectorres; vectorused; void generate_Permutation(string &str,string &p) { if(p.size()==str.size()) { res.push_back(p); return; } for(int i=0;i Permutation(string str) { if(str.size()==0) return res; //false 表示没有被访问过,true,表示已经被访问了 used=vector(str.size(),false); string p; generate_Permutation(str,p); //sort(res.begin(),res.end()); //set是有序的,且去除重复的元素 settmp(res.begin(), res.end()); //先清除再重新加入 res.clear(); for (auto i : tmp) { res.push_back(i); } return res; }};
先排序,后比较前后是否相等,去重复
class Solution { vectorres; vectorused; void generate_Permutation(string &str,string &p) { if(p.size()==str.size()) { res.push_back(p); return; } for(int i=0;i0&&str[i]==str[i-1]&&used[i-1]==false) continue; p.push_back(str[i]); used[i]=true; generate_Permutation(str,p); used[i]=false; p.pop_back(); } } } public: vector Permutation(string str) { if(str.size()==0) return res; //false 表示没有被访问过,true,表示已经被访问了 used=vector(str.size(),false); string p; //因为字符串有重复的部分,保持输出不重复,先排序,比较前后两个是否重复 sort(str.begin(),str.end()); generate_Permutation(str,p); return res; }};
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
暂时没有评论,来抢沙发吧~