【发布时间】:2013-03-22 05:09:13
【问题描述】:
我编写了一个通用程序来生成字符串排列但删除重复的情况。为此,我使用 . 进行记忆。
void permute(char *a,int i, int n,set<char*> s)
{
if(i==n)
{
if(s.find(a)==s.end()){
cout<<"no dublicate"<<endl;
cout<<a<<endl;
s.insert(a)
}
}
else{
for(int j=i;j<n;j++)
{
swap(a[i],a[j]);
permute(a,i+1,n,s);
swap(a[i],a[j]);
}
}
}
int main()
{
char a[]="aba";
set <char*> s;
permute(a,0,3,s);
return 0;
}
但结果并不如预期。它打印所有排列。谁能帮我解决问题。
【问题讨论】:
-
什么是“复制”?
-
你的意思是你想要组合而不是排列?
-
你试过 std::next_permutation 了吗?
-
对于那些询问他对重复项是什么意思的人,我认为他的意思是(给定输入“aab”)他不希望“aab”返回两次(一次是原始字符串,一次是第一个和第二个
a被置换)。