class Solution {
public:
vector<string> permutation(string s) {
vector<string>res;
if(s.size()==0)return res;
sort(s.begin(),s.end());//排序,也可不排序,看需求
permutation(s,0,s.size(),res);
return res;
}
void permutation(string& str,int begin,int end,vector<string>&res)
{
if(begin==end)
{
vector<string>::iterator vit;
bool isOk=true;
for(vit=res.begin();vit!=res.end();++vit)
{
if(*vit==str)isOk=false;
//是否右相同的
}
if(isOk)
{//如果不想等,就插入
res.push_back(str);
}
}
else
{//固定一位,与后面的交换,以此类推
for(int i=begin;str[i]!='\0';++i)
{
//if(i>begin&&str[i]==str[begin])continue;//相同的字母剔除,但是好像没啥用
swap(str[i],str[begin]);
permutation(str,begin+1,end,res);
swap(str[i],str[begin]);
}
}
}
};
面试题38:字符串的排列
最新推荐文章于 2020-11-28 14:26:43 发布